2016-07-24 137 views
-2
#include<stdio.h> 
#define sqr(i) i*i 

int main() 
{ 
     printf("%d %d", sqr(3), sqr(3+1)); //output 9,7 
     return 0;` 
} 

为什么输出是9,7? 有谁能够与步骤解释说,7是如何得到评估任何人都可以解释这段代码的输出吗?

+1

哪一部分不清楚? –

+0

如果你得到了逗号分隔的输出,那么这确实是一个谜。 – usr2564301

+0

@RadLexus OP可能不知道差别很重要。 – peterh

回答

0

您使用您定义宏,但定义是一个陷阱本身:

#define sqr(i) i*i 

,当你做到这一点 SQR(3),那么这将被取代,执行为3 * 3导致

但这里是问题

SQR(3 + 1)将被替换d和执行作为3 + 1×3 + 1所得3 + 3 + 1 = 7

因为参数将不被之前被传递给宏解决...

相反,它会只是做一个愚蠢的替换,改变每巧合的参数3 + 1

人机工程学:

宏行为

input output 

3   9 
3+1  7 
4   16 
2

sqr(i) i*isqr(3+1)将进行评估,以3+1*3+1这是... 7。将宏的参数放在圆括号中:

#define sqr(i) (i) * (i) 

如果您确实想为此使用宏。

相关问题