编辑
2024-12-17
工作知识
0
请注意,本文编写于 171 天前,最后修改于 171 天前,其中某些信息可能已经过时。

目录

参考:《深入C语言和程序运行原理》

一:宏扩展出错

#define FUN(x) 1 + x * x int main() {         printf("%d\n", 3*FUN(1)); return 0; }

这里宏扩展成了 31+11。并不是3*(1+1)。 为了避免这种出错,尽量在宏这里使用括号
#define FUN(x) (1 + x * x)

二:宏内部扩展出错

#define FUN(x) (x*x) int main() { printf("%d\n", FUN(1+1)); return 0; }

这里宏内部扩展成了(1+11+1)。并不是((1+1)(1+1)) 为了避免这种错误,尽量在宏的变量处添加括号
#define FUN(x) ((x)*(x)) 三:宏变量自加/自减出错

#define FUN(x) (x*x) int main() { int i=2; printf("%d\n", FUN(i++)); return 0; }

这里输出是6,也就是2*3,因为i自加了为了避免这种错误,自加/自减不要在宏扩展里面用。
四:宏函数扩展错误

#define FUN(x) x=10;x+=1 int main() { int i=2; if (i == 1) FUN(i); printf("%d\n", i); return 0; }

这里因为if没有缺省括号,导致宏扩展后,x+=1在if外面了。所以输出是3而不是2 为了避免这种错误,可以使用do while写法如下 #define FUN(x) do{x=10;x+=1;}while(0)

参考:《深入C语言和程序运行原理》