Iva*_*van 3 c++ pch visual-studio
我正在重构一些现有软件,并且经常看到
#define XYZ
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
stdafx预编译的头文件在哪里。
Q1。知识渊博的人可以确认以下内容吗?正确的顺序始终是
(除了文件之外stdafx.cpp)
#include "stdafx.h"
#define XYZ
Run Code Online (Sandbox Code Playgroud)
我的推理如下。由于标头是预编译的,因此即使已在标头中使用,在预编译的标头之前的定义也不会影响预编译的标头。预编译头将使用XYZ初始编译发生时设置为宏的任何内容。
所以
#define XYZ
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
误导读者进行思考XYZ可能对内容产生影响stdafx.h。
Q2。两者在功能上是否等效,我的重构是否安全?
#include "stdafx.h"
#define XYZ
Run Code Online (Sandbox Code Playgroud)
明确定义,XYZ而替代方案没有那么明确定义。(据我所知,使用预编译头很可能会被某些编译器覆盖该定义。)但是XYZ在包含预编译头之前进行定义似乎确实可行,因为它在重构的代码中经常出现。
Q3。行为是否在标准中定义?
如果我是编译器作者,那么#define在包含预编译头之前,我将拒绝任何内容!我的VS2019没有。
您声明:
因为标头是预编译的,所以即使在标头内部使用“预编译”标头之前的定义也不会影响预编译的标头。
但是从Microsoft文档的Precompiled头文件中:
[#defines]在创建预编译头文件的编译文件和当前编译文件之间必须相同。未检查已定义常量的状态,但是如果您的文件依赖于更改后的常量的值,则可能会发生不可预测的结果。
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |