7

如何創建一個編譯器警告(在#ERROR的模型,但是作爲警告)在Visual C++的目的,這將顯示在用正確的文件和行號的錯誤列表?出現在錯誤列表中的Visual C++的故意編譯器警告?

GCC和其他編譯器提供#warning後,但MSVC編譯器不。

的「解決方案」在http://support.microsoft.com/kb/155196不會在Visual Studio錯誤列表解析。

+0

看起來,你是感到困惑,究竟是堆棧溢出。 – Juliano 2010-07-02 03:05:25

+0

這是一個S.O.有點問題。我也想知道別人會做得更好。 – Thomas 2010-07-02 03:07:35

+0

@Juliano:你對這個問題有什麼不滿意的地方?這絕對是主題和有趣的。它可能是重複的,但我找不到重複的問題。 – 2010-07-02 03:10:58

回答

10

只需添加到您的常見的包括文件(例如,stdafx.h中):

#define __STR2__(x) #x 
#define __STR1__(x) __STR2__(x) 
#define __LOC__ __FILE__ "("__STR1__(__LINE__)") : warning W0000: #pragma VSWARNING: " 
#define VSWARNING(x) message(__LOC__ x) 

使用此類似:

#pragma VSWARNING("Is this correct?!?!") 

編譯器將輸出:

c:\dir\file.h(11) : warning W0000: #pragma VSWARNING: Is this correct?!?! 

錯誤列表選項卡將在表格中很好地顯示警告:

Type  Num Description            File Line 
[Warning] 13 warning W0000: #pragma VSWARNING: Is this correct?!?! file.h 11 

完全像一個正常的Visual Studio編譯器警告。

+1

我使用了類似的實現這個(我張貼[在回答另一個問題(http://stackoverflow.com/questions/2703528/what-c​​ode-have-you-written-with-pragma-你發現的,有用/ 2706693#2706693))。我沒有意識到,Visual C++會宏替換編譯指示的文本;這非常酷。 – 2010-07-02 03:08:44

+1

在相關說明中,您還可以在輸出文本中使用「錯誤」而不是「警告」;這會導致編譯失敗(如#錯誤),但允許編譯繼續到翻譯單元的末尾(這在某些情況下非常有用)。 – 2010-07-02 03:13:09

1

這是一種愚蠢的回答你的問題,但往往,如果我需要添加一個故意的警告,我會鍵入類似:

#pragma asdfkljasdlfjasklfjklasjdfklj 

其發出Unknown Pragma行號和所有警告。

+0

不過,它不會在編譯器輸出和錯誤列表中輸出實際的消息。只出現「未知的雜注」。 – Thomas 2010-07-02 04:21:15