具有不同结果的宏论证

时间:2016-01-15 21:47:36

标签: c macros

所以我在我的C程序中使用宏调用时遇到了这个相当'不屈不挠'的问题。 我使用的宏是:

#define MACRO(X) X*X

问题在于我这样做

printf("%d",MACRO(3));

结果显示9(这是正确的)。只有当我以3 + 2传递3时如下:

printf("%d",MACRO(2+1));

奇怪地显示了5的结果。 任何人都可以告诉我为什么?

2 个答案:

答案 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作为结果。