奇怪的预处理

lit*_*tuk 1 c++ visual-studio c-preprocessor

奇怪的事发生了.

我在我的代码中有一个本地函数

#ifdef abc
.
.
.
#endif
Run Code Online (Sandbox Code Playgroud)

当我写在文件的顶部

#define abc
Run Code Online (Sandbox Code Playgroud)

它就像没有定义一样.只有我定义

#define abc
Run Code Online (Sandbox Code Playgroud)

在本地函数本身中,它读取ifdef中的代码.

这很奇怪,因为我认为编译器只是遍历整个文件而没有更改#preprocessing命令的函数细节.无法理解发生了什么.我正在使用visual-studio 2005.

Hen*_*rik 10

可能你在#include"stdafx.h"之前有#define.这被忽略了.

  • @VJo:这是使用预编译头文件的一个众所周知的警告:如果不能保证预先编译的头文件被包含在其他所有头文件之前,那么实现预编译头文件几乎是不可能的(因为包含头文件的含义在不同版本中会有所不同)翻译单位).事实上,当Visual C++忽略在预编译头包含之前出现的令牌是"特征"时,它不会警告您. (3认同)