This question already has answers here:
C : #define usage [duplicate]
                                
                                    (3个答案)
                                
                        
                                4年前关闭。
            
                    
#include <stdio.h>
#define SQR(x) x*x
int main()
{
    printf("%d",225/SQR(15));
    return 0;
}


这段代码的输出是225。我无法理解这里发生的实际情况。
如果我使用#define SQR(x) (x*x),那么它可以正常工作,因为如果我们有一些运算符的表达式,我们应该使用括号。
但是在前一种情况下,我不清楚真正发生了什么。为什么答案是225?

最佳答案

宏仅进行替换(在编译代码之前完成)。

因此,以下行

printf("%d",225/SQR(15));


替换后将变为:

printf("%d",225/15*15);


现在此表达式的计算结果为225(基本数学:先除以-> 15 * 15,然后乘以-> 225)

使用括号解决您的问题(然后变成225 /(15 * 15))。
:)

关于c - C中的#define指令给出模棱两可的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33187513/

10-11 16:18