【问题标题】:Intentional compiler warnings for Visual C++ that appear in Error List?出现在错误列表中的 Visual C++ 的故意编译器警告?
【发布时间】:2010-07-02 11:48:43
【问题描述】:

如何在 Visual C++ 中故意创建编译器警告(在 #error 模型中,作为警告除外),它会以正确的文件和行号显示在错误列表中?

GCC 和其他编译器提供#warning,但 MSVC 编译器不提供。

http://support.microsoft.com/kb/155196 处的“解决方案”未在 Visual Studio 错误列表中解析。

【问题讨论】:

  • 看起来您对 Stack Overflow 到底是什么感到困惑。
  • 这是一个 S.O.之类的问题。我也想知道别人会做得更好。
  • @Juliano:你觉得这个问题到底有什么令人反感的地方?它肯定是主题和有趣的。它可能是重复的,但我找不到重复的问题。
  • @James:他发布了问题答案。它看起来像一篇博客文章或其他东西。现在他编辑了它,但它仍然很奇怪。查看修订历史以了解。
  • @Juliano:FAQ 中明确表示这种问题很好(甚至是问题/答案类型),并且自测试版以来就已经如此。

标签: c++ visual-studio compiler-construction compiler-warnings pragma


【解决方案1】:

只需将其添加到您的常用包含文件(例如,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 编译器警告完全一样。

【讨论】:

  • 我使用了与此类似的实现(我发布了它in response to another question)。我没有意识到 Visual C++ 会宏替换 pragma 指令的文本。太酷了。
  • 在相关说明中,您还可以在输出文本中使用“错误”而不是“警告”;这会导致编译失败(就像#error 一样),但允许编译继续到翻译单元的末尾(这在某些情况下非常有用)。
【解决方案2】:

这是对您问题的一种愚蠢的回答,但通常,如果我需要添加有意的警告,我会输入如下内容:

#pragma asdfkljasdlfjasklfjklasjdfklj

发出带有行号和所有行号的Unknown Pragma 警告。

【讨论】:

  • 这不会在编译器输出和错误列表中打印实际消息。只出现“未知的编译指示”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多