我正在重构一些现有软件,并且经常看到
#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: