gpt4 book ai didi

c++ - #define XYZ before #include 预编译头文件

转载 作者:太空狗 更新时间:2023-10-29 20:19:44 26 4
gpt4 key购买 nike

我正在重构一些现有的软件,我经常看到这个

#define XYZ 
#include "stdafx.h"

其中stdafx是预编译的头文件。

Q1。 请懂行的人确认一下?
(可能除了文件 stdafx.cpp)正确的顺序总是

#include "stdafx.h"
#define XYZ

我的推理如下。预编译 header 之前的定义不会影响预编译 header ,即使在 header 内部“使用”也是如此,因为 header 是预编译的。预编译 header 将使用初始编译发生时宏 XYZ 设置的任何值。

所以

#define XYZ 
#include "stdafx.h"

误导读者认为 XYZ 可能会对 stdafx.h 的内容产生影响。

Q2。 两者在功能上是否等同,我的重构是否安全?

#include "stdafx.h"
#define XYZ

清楚地定义了 XYZ 而替代方案并没有那么明确地定义它。 (据我所知,使用预编译头可能会用某些编译器覆盖定义。)然而,在包含预编译头之前定义 XYZ 似乎确实有效,因为它经常出现在我的代码中正在重构。

Q3。 行为是否在标准中定义?

如果我是编译器编写者,我会在包含预编译 header 之前拒绝任何 #define!我的 VS2019 没有。

最佳答案

你说:

A define before the precompiled header can't affect the precompiled header even if 'used' inside the header, since the header is precompiled.

但来自 Microsoft 文档 Precompiled Header Files :

[#defines] Must be the same between the compilation that created the precompiled header and the current compilation. The state of defined constants is not checked, but unpredictable results can occur if your files depend on the values of the changed constants.

关于c++ - #define XYZ before #include 预编译头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851784/

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