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