gpt4 book ai didi

C++/C#定义宏计算

转载 作者:太空狗 更新时间:2023-10-29 23:32:46 24 4
gpt4 key购买 nike

假设我有

#define DETUNE1 sqrt(7)-sqrt(5)
#define DETUNE2 sqrt(11)-sqrt(7)

我在我的程序中多次调用这些。

DETUNE1 和 DETUNE2 是否在每次被调用时计算?

最佳答案

Are DETUNE1 and DETUNE2 calculated every time it is called?

不太可能

因为您使用常量调用 sqrt,大多数编译器会优化对 sqrt 函数的调用并将其替换为常量值。 GCC 在 -O1 处执行此操作。 clang也是。 (See live)。

在一般情况下,如果您有一个将 n 作为运行时值的宏:

#define DETUNE1(n) (sqrt(n)-sqrt(n))

然后在文本替换之后,至少 sqrt 函数之一需要计算。

请注意您的宏安全。为了安全起见,你应该在它周围加上括号。例如,DETUNE1 * DETUNE1 不会产生您期望的结果。

关于C++/C#定义宏计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30995253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com