亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的包含保護不阻止遞歸包含和多個符號定義?

為什么我的包含保護不阻止遞歸包含和多個符號定義?

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 關注
  • 438 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號