所以我在我的C程序中使用宏调用时遇到了这个相当'不屈不挠'的问题。 我使用的宏是:
#define MACRO(X) X*X
问题在于我这样做
printf("%d",MACRO(3));
结果显示9(这是正确的)。只有当我以3 + 2传递3时如下:
printf("%d",MACRO(2+1));
奇怪地显示了5的结果。 任何人都可以告诉我为什么?
答案 0 :(得分:5)
printf("%d",MACRO(2+1));
预处理后,它将成为
printf("%d",2+1*2+1);
由于乘法对加法具有较高的预防性,因此会打印5;
要解决此问题,您必须按如下方式定义宏
#define MACRO(X) (X)*(X)
答案 1 :(得分:4)
你需要像这样定义你的宏
#define MACRO(X) (X)*(X)
宏只是一个文本扩展,因此您的以下代码将被解释为......
printf("%d", 2+1*2+1);
按照操作顺序,您可以看到如何得到5作为结果。