最佳答案
关于 包括警卫有两个常见的问题:
第一个问题:
为什么不包括保护我的头文件从 相互递归包含的守卫?每次我写下面这样的东西时,我都会不断地遇到不存在的符号的错误,这些符号显然是存在的,甚至是更奇怪的语法错误:
“啊”
#ifndef A_H
#define A_H
#include "b.h"
...
#endif // A_H
“ BH”
#ifndef B_H
#define B_H
#include "a.h"
...
#endif // B_H
“ main.cpp”
#include "a.h"
int main()
{
...
}
为什么我在编译“ main.cpp”时会出错? 我需要做什么来解决我的问题?
第二个问题:
为什么不包括防止 多重定义的警卫?例如,当我的项目包含两个包含相同标头的文件时,有时链接器会抱怨某个符号被多次定义。例如:
“头 H”
#ifndef HEADER_H
#define HEADER_H
int f()
{
return 0;
}
#endif // HEADER_H
“ source 1.cpp”
#include "header.h"
...
“ source 2.cpp”
#include "header.h"
...
为什么会这样? 我需要做什么来解决我的问题?