#include <stdio.h>
#define S(a,b) a*b
int main(void)
{
int n = 3;
int m = 5;
printf("%d",S(n+m,m+n));
return 0;
}
这道题容易出现的错误结果是64,得到这个结果肯定是这样理解的(3+5)*(5+3)。其实并不是,大家要理解宏定义的概念,宏定义只是简单的符号替换,而不做其他处理,所以这里得到的结果是 3+5*5+3=31.
大家看看运行结果:
fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c
fs@ubuntu:~/qiang/hanshu$ ./1
31
要想得到正确结果,应该怎么样呢?应该这样改,define s(a,b) (a)*(b),这样才是正确结果;
fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c
fs@ubuntu:~/qiang/hanshu$ ./1
64
大家记住这句话,宏定义只是简单的符号替换!