#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是如何得到评估任何人都可以解释这段代码的输出吗?
#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是如何得到评估任何人都可以解释这段代码的输出吗?
您使用您定义宏,但定义是一个陷阱本身:
#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
宏sqr(i) i*i
为sqr(3+1)
将进行评估,以3+1*3+1
这是... 7
。将宏的参数放在圆括号中:
#define sqr(i) (i) * (i)
如果您确实想为此使用宏。
哪一部分不清楚? –
如果你得到了逗号分隔的输出,那么这确实是一个谜。 – usr2564301
@RadLexus OP可能不知道差别很重要。 – peterh