【发布时间】:2015-08-11 12:03:58
【问题描述】:
#include<stdio.h>
#define SQUARE(x) x*x
int main(){
float s=10,u=30,t=2,a;
a=2*(s-u*t)/SQUARE(t); // How is this evaluated ?
printf("Result %f\n",a);
return 0;
}
编译器显示的输出是-100.000000。但根据我的说法,它应该是-25.000000。我应该怎么做才能纠正它,我的错误是什么?
【问题讨论】:
-
#define执行文字字符串替换。所以你会得到a = 2*(s-u*t)/t*t,给定运算符的求值顺序,它将求值为a = (2*(s-u*t)/t)*t。你可能真的想要a = 2*(s-u*t)/(t*t),所以你应该有#define SQUARE(x) ((x)*(x)) -
FWIW,see this.
-
最好的了解方式:
cpp your_file.c -
@SouravGhosh 我发现复合文字实际上是运算符。呜呜。
-
@SouravGhosh 是有道理的。
标签: c macros c-preprocessor