为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的包含保护不阻止递归包含和多个符号定义?

为什么我的包含保护不阻止递归包含和多个符号定义?

C++
慕侠2389804 2019-06-26 16:40:26
为什么我的包含保护不阻止递归包含和多个符号定义?两个常见问题包括警卫:第一个问题:为什么不包括保护我的头文件的警卫相互的、递归的包含?每当我写下面这样的东西时,我总是会收到关于不存在的符号的错误,这些符号显然是存在的,甚至是更奇怪的语法错误:“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 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

首先,你应该100%地确定你在“包括守卫”中没有副本。

用这个命令

grep -rh "#ifndef" * 2>&1 | uniq -c | sort -rn | awk '{print $1 " " $3}' | grep -v "^1\ "

你将1)高亮显示所有包含护卫,得到唯一的行与计数器按包含名称,排序结果,只打印计数器和包括名称,并删除那些是真正唯一的。

提示:这相当于获得重复的包含名称的列表。


查看完整回答
反对 回复 2019-06-26
  • 2 回答
  • 0 关注
  • 394 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信