包含警卫的问题

Izz*_*zza 6 c++ visual-c++ inclusion

当我为我的头文件添加一个包含Guard的Visual C++项目时,它给了我以下警告和错误:

警告C4603:'_ MAPTEST_H':未定义宏或预编译头使用后定义不同

将宏添加到预编译头,而不是在此处定义

.\ MapTest.cpp(6):使用预编译头**//预编译头stdafx.h包含在此行中

.\ MapTest.cpp(186):致命错误C1020:意外#endif

但是当我在include guard之前添加预编译头时,不会发出警告或错误.这是什么原因?

tza*_*man 18

我能想到的两个问题:

  1. 根据这一点,Visual C++将不会在您包含的行之前编译任何内容stdafx.h- 因此该行必须是文件中的第一行.如果你把它放在宏定义之后,它会被跳过,因此你会看到错误.

  2. 以前导下划线和大写字母(或双前导下划线)开头的标识符将被保留,这可能会导致名称冲突.有关详细信息,请参阅此答案.