所以我在C程序中使用宏调用时遇到了这个相当'不屈不挠'的问题.我使用的宏是:
#define MACRO(X) X*X
Run Code Online (Sandbox Code Playgroud)
问题出在我这样做的时候
printf("%d",MACRO(3));
Run Code Online (Sandbox Code Playgroud)
结果显示9(这是正确的).只有当我将3传递为2 + 1时如下:
printf("%d",MACRO(2+1));
Run Code Online (Sandbox Code Playgroud)
它奇怪地显示了5的结果.任何人都可以告诉我为什么?
printf("%d",MACRO(2+1));
Run Code Online (Sandbox Code Playgroud)
预处理后,它将成为
printf("%d",2+1*2+1);
Run Code Online (Sandbox Code Playgroud)
由于乘法对加法具有较高的预防性,因此它将打印5;
要解决此问题,您必须按如下方式定义宏
#define MACRO(X) (X)*(X)
Run Code Online (Sandbox Code Playgroud)