VS2010是否预先计算#define定义的预处理器?

Does VS2010 pre-calculate preprocessor defined by #define?

对于Visual Studio 2010,如果我定义

#define PI 4.0f*atan(1.0f)

当代码后面某处使用 PI 时,是否需要重新计算该值,或者只是插入 3.1415926...?谢谢

编辑:

因为我听说有人说编译器可能会优化以将其替换为 3.1415926..,具体取决于编译器。

当预处理器运行时,它会将 PI 的每个实例替换为 4.0*atan(1.0f)

#define 是 "copy-paste" 类型的东西。如果您的代码显示 std::cout << PI;,那么编译器会假装您输入的是 std::cout << 4.0f*atan(1.0f);

定义的值在使用前不会计算,并且理论上每次使用时都会重新计算。然而,大多数现代编译器会看到 std::cout << 4.0f*atan(1.0f); 并在编译时进行计算,并会为 std::cout << 3.14159265f; 发出汇编,因此代码的速度与预先计算的一样快。

无关,#include 也是一种复制粘贴的东西,这就是为什么我们需要包含守卫。

#define 将进行直接文本替换。正因为如此,你到处都有 PI,它将被替换为 4.0f*atan(1.0f)。我怀疑编译器会在代码生成期间优化它,但唯一真正知道的方法是编译它并检查程序集。

我发现这个 little online tool 将采用 C++ 代码并生成汇编输出。如果打开优化,您会看到为显示 PI 生成的代码消失了,它现在只是一个被引用的常量。