为什么我的包含保护不阻止递归包含和多个符号定义?两个常见问题包括警卫:第一个问题:为什么不包括保护我的头文件的警卫相互的、递归的包含?每当我写下面这样的东西时,我总是会收到关于不存在的符号的错误,这些符号显然是存在的,甚至是更奇怪的语法错误:“A.H”#ifndef A_H#define A_H#include "b.h"...#endif // A_H“B.H”#ifndef B_H#define B_H#include "a.h"...#endif // B_H“main.cpp”#include "a.h"int main(){
...}为什么我在编译“main.cpp”时出错?我需要做些什么来解决我的问题?第二个问题:为什么不包括守卫多重定义?例如,当我的项目包含两个包含相同标题的文件时,有时链接器会抱怨某个符号被多次定义。例如:“Header.h”#ifndef HEADER_H#define HEADER_Hint f(){
return 0;}#endif // HEADER_H“Source1.cpp”#include "header.h"...“Source2.cpp”#include "header.h"...为什么会发生这种事?我需要做些什么来解决我的问题?
2 回答
![?](http://img1.sycdn.imooc.com/545847f50001126402200220-100-100.jpg)
弑天下
TA贡献1818条经验 获得超8个赞
grep -rh "#ifndef" * 2>&1 | uniq -c | sort -rn | awk '{print $1 " " $3}' | grep -v "^1\ "
提示:
- 2 回答
- 0 关注
- 394 浏览
添加回答
举报
0/150
提交
取消