具有不同结果的宏论证

use*_*612 1 c macros

所以我在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的结果.任何人都可以告诉我为什么?

Ste*_*hen 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)

  • 我会使用((X)*(X))但可能是多余的 (2认同)