我正在重构一些现有软件,并且经常看到

#define XYZ
#include "stdafx.h"

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

Q1。 有知识的人可以确认以下内容吗?
(正确的顺序始终是)(也许除了文件stdafx.cpp以外)
#include "stdafx.h"
#define XYZ

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

所以
#define XYZ
#include "stdafx.h"

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

Q2。 两者在功能上是否等效,我的重构是否安全?
#include "stdafx.h"
#define XYZ

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

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

如果我是编译器作者,那么在包含预编译头之前,我将拒绝任何#define!我的VS2019没有。

最佳答案

您声明:



但是从Microsoft文档Precompiled Header Files:

10-04 12:09
查看更多