簡體   English   中英

如何找出命名空間如何被污染?

[英]How to find out how namespace got polluted?

考慮以下一小段代碼:

// all of these include other headers, lots of code:
#include "myheader1.h"
#include "myheader2.h"
#include <string>

void foo() {
  string s("hello world"); // oh no, why does this compile??
}

這個編譯,顯然一些遞歸包含的頭文件有一個

using namespace std;

某處。 您將如何找到違規代碼行的位置?

在所有頭文件上使用grep實際上不會起作用,因為該語句通常函數內部使用,它是安全的並且不會污染其余的代碼。

無論如何,grep可能會有用。 搜索“^ using namespace”。 在一個函數里面有一個非常公平的機會它會縮進,但在它之外它不會......

編譯器通常必須給預處理輸出(-E是常見),該得到亦是如此源極線的指示在q上的可能性#line線。

試着把string s; 在每個#include語句之后找到它不會導致錯誤的第一個地方。 這將顯示導致問題的標頭。 然后對該標題內的#include語句執行相同操作,依此類推。

一點手動過程,但不應該花太長時間。

$ g++ -E souce.cpp | less

從較少的類型/using ,然后從那里尋找前一行看起來像

# <file_name> <line_number>

這就是預處理器如何告訴編譯器某些代碼來自哪個源,因此它可以正確地執行錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM