DEFINE() 宏在表达式中的用法

发布于 2024-11-02 13:41:31 字数 275 浏览 1 评论 0原文

所以我定义了..

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

然后像这样使用它:

RADIAN(theta-90)

我的程序不断地给我错误的结果,我花了几个小时才意识到上面的语句和下面的语句之间存在巨大的差异。

RADIAN((theta-90))

现在我的程序运行得很好。为什么第一个说法不正确?

So I defined..

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

and then used it like this:

RADIAN(theta-90)

My program constantly gave me incorrect results, it took me a couple hours to realize that there was a huge difference between the above statement and the statement below.

RADIAN((theta-90))

Now my program is running perfectly fine. Why is the first statement incorrect?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

芸娘子的小脾气 2024-11-09 13:41:31

#define 仅进行文本替换,因此 RADIAN(theta-90) 实际上是 theta-90*3.14159265f/180.0f,显然不是不是你的意思。尝试

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

一下。

#define makes just text substitution, so RADIAN(theta-90) was really theta-90*3.14159265f/180.0f, what obviously wasn't what you meant. Try

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

instead.

执着的年纪 2024-11-09 13:41:31

宏的 largley 进行基于文本的替换,因此

RADIAN(theta-90) 

扩展为:

theta - 90* 3.14159265f/180.0f  

由于运算符优先级,其计算结果为:

theta - (90* 3.14159265f/180.0f)  

Macro's largley do text based replacement so

RADIAN(theta-90) 

expands to:

theta - 90* 3.14159265f/180.0f  

which because of operator precedence, evaluates as:

theta - (90* 3.14159265f/180.0f)  
溺深海 2024-11-09 13:41:31

上面的答案都是正确的。然而,还有一点尚未明确……

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

The answers above are all correct. However, one point has not yet been made...

This is C++, not C. Stop using preprocessor macros.

耶耶耶 2024-11-09 13:41:31

这是因为,在第一种情况下 X 将被替换为 (theta-90),因此您的函数将计算为:

theta - 90* 3.14159265f/180.0f

This is because, in the first case X will be replaced by (theta-90) so your function would evaluate to:

theta - 90* 3.14159265f/180.0f
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文