表达中的DEFINE()宏用法

时间:2011-04-20 06:53:29

标签: c++ c-preprocessor

所以我定义了..

#define RADIAN(x) x*3.14159265f/180.0f

然后像这样使用它:

RADIAN(theta-90)

我的程序经常给我不正确的结果,我花了几个小时才意识到上述陈述与下面的陈述之间存在巨大差异。

RADIAN((theta-90))

现在我的程序运行得非常好。为什么第一个陈述不正确?

4 个答案:

答案 0 :(得分:7)

#define只进行文字替换,因此RADIAN(theta-90)确实是theta-90*3.14159265f/180.0f,显然不是您的意思。尝试

#define RADIAN(x) ((x)*3.14159265f/180.0f)

代替。

答案 1 :(得分:4)

宏很大程度上是基于文本的替换,所以

RADIAN(theta-90) 

扩展为:

theta - 90* 3.14159265f/180.0f  
由于运算符优先级,

的结果为:

theta - (90* 3.14159265f/180.0f)  

答案 2 :(得分:2)

以上答案都是正确的。但是,还有一点尚未确定......

这是C ++,而不是C.停止使用预处理器宏。

答案 3 :(得分:0)

这是因为,在第一种情况下, X 将被(theta-90)取代,因此您的函数将评估为:

theta - 90* 3.14159265f/180.0f