Visual C++中出现在错误列表中的有意编译器警告?

8
如何在Visual C++中故意创建编译器警告(类似于#error,但作为警告),并在错误列表中显示正确的文件和行号?
GCC和其他编译器提供了#warning,但MSVC编译器没有。 http://support.microsoft.com/kb/155196上的“解决方案”无法在Visual Studio错误列表中解析。

看起来你对 Stack Overflow 到底是什么感到困惑。 - Juliano
这是一个操作系统方面的问题。我还想知道其他人怎么做得更好。 - Thomas
@Juliano:您对这个问题到底有什么反感之处?它绝对是相关和有趣的。虽然可能是重复的,但我找不到重复的问题。 - James McNellis
@James:他发布了问题和答案。看起来像是一篇博客文章之类的东西。现在他已经编辑过了,但还是很奇怪。查看修订历史记录以了解详情。 - Juliano
2
@Juliano:常见问题解答明确表示这种类型的问题是可以的(甚至包括问题/回答类型),自从测试版以来就一直如此。 - Jason Coco
@Jason,按照我的建议去查看问题的修订历史记录。他把答案发布在问题区域,显然是错误的。现在他编辑了问题。唉... - Juliano
2个回答

11

只需将以下内容添加到您的公共包含文件(例如,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
我使用了类似的实现方式(我在回答另一个问题时发布了它,链接为:https://dev59.com/xXE85IYBdhLWcg3wl0nF#2706693)。我没有意识到Visual C++会宏替换#pragma指令的文本;这非常酷。 - James McNellis
1
另外,你也可以在输出文本中使用“错误”代替“警告”,这会导致编译失败(就像#error一样),但允许编译继续到翻译单元的末尾(在某些情况下非常有用)。 - James McNellis

1

这可能是对你问题的一个有点傻的回答,但通常情况下,如果我需要添加一个有意的警告,我会输入类似以下的内容:

#pragma asdfkljasdlfjasklfjklasjdfklj

这会发出一个带有行号的未知Pragma警告。


虽然编译器输出和错误列表中没有实际消息打印出来,但只有“未知的Pragma”出现。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接