C 中的预处理器指令
Preprocessor Directives in C
为什么下面程序的输出是 125 而不是 5?
#include<stdio.h>
#define square(x) x*x
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}
这一行:
var = 125/square(5);
扩展为:
var = 125/5*5;
从左到右求值到 25*5
然后到 125
;
要修复它,请在 square
的定义中将参数括起来,如下所示:
#define square(x) ((x)*(x))
另请注意 x
周围的额外括号,以便在例如1+2
传递到 square
.
请注意,编译代码时 var = 125/square(5);
变为 var = 125/5*5
。
所以编译器在5*5
之前计算125/5
。结果变成(125/5)*5 = 125
.
将 #define square(x) x*x
改为 #define square(x) (x*x)
.
这是您的代码:
#include<stdio.h>
#define square(x) (x*x)
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}
为什么下面程序的输出是 125 而不是 5?
#include<stdio.h>
#define square(x) x*x
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}
这一行:
var = 125/square(5);
扩展为:
var = 125/5*5;
从左到右求值到 25*5
然后到 125
;
要修复它,请在 square
的定义中将参数括起来,如下所示:
#define square(x) ((x)*(x))
另请注意 x
周围的额外括号,以便在例如1+2
传递到 square
.
请注意,编译代码时 var = 125/square(5);
变为 var = 125/5*5
。
所以编译器在5*5
之前计算125/5
。结果变成(125/5)*5 = 125
.
将 #define square(x) x*x
改为 #define square(x) (x*x)
.
这是您的代码:
#include<stdio.h>
#define square(x) (x*x)
int main()
{
int var;
var = 125/square(5);
printf("%d",var);
return 0;
}