【问题标题】:Issue warning and compiling with warnings-as-errors violates compliance?发出警告并使用警告作为错误进行编译是否违反合规性?
【发布时间】:2015-08-06 22:57:50
【问题描述】:

我的问题 (Single line comment continuation) 让我想知道编译器的合规性和警告消息,尤其是许多编译器中的警告即错误功能。

根据 C++ 规范,第 1.4.2.1 节指出:

如果程序不违反本国际标准中的规则,则符合要求的实现应在其资源限制内接受并正确执行该程序。

如果针对技术上符合标准的代码发出警告消息(如在我的链接问题中),即使我特别要求发出警告(再次,在我的示例中,如果我使用 -Wcomments 和 gcc ),并且我使用警告错误(-Werror),程序将无法编译。我意识到这是相当迟钝的,因为我可以通过多种方式解决这个问题。但是,鉴于引用,这是否违反了通常允许的标准,还是以某种方式明确允许的?

【问题讨论】:

  • 如果有帮助,您可以将gcc -Werror 视为不符合标准的实现。将其视为只是一个开发和样式助手(如 Clippy),它可以帮助您创建一个外观漂亮的程序,您可以(或可以)将其提供给符合要求的实现。
  • 是否有任何文档和/或迹象表明您正在使用 gcc 或其他编译器在非合规模式下进行编译?
  • @MuertoExcobito:GCC 的诊断肯定会区分“真实”错误和被视为错误的警告。当然,您可以知道警告被视为错误,因为您指定了-Werror。我没有使用足够的其他编译器来评论它们。

标签: c++ language-lawyer


【解决方案1】:

是的,如果您告诉实现不符合标准(例如,通过为格式良好的代码构造请求错误),那么它的行为将不符合标准。

【讨论】:

  • @Jefffrey 好吧,假设您编写的代码在技术上符合标准(即使我的 cmets 问题并不是很好)。它在许多具有不同选项的不同编译器上进行编译,并非您拥有或可以测试的所有选项。如果编译器应该符合标准,但根据编译器选项编译失败,这可能非常重要。
  • @MuertoExcobito:我不明白为什么它可能“非常重要”。这只是意味着,如果您正在构建(符合)来源可疑的代码,您可能必须禁用任何用于对自己的代码施加额外限制的编译器选项。
  • @MuertoExcobito:这对那些决定想要这些警告的人来说才重要。这不是你的问题。也就是说,这些人可能会使用警告来决定他们不想购买您的图书馆。 :-)
  • @MuertoExcobito:那么编译代码的人可能不得不禁用他们用来对其代码实施非标准限制的任何选项。如果您的代码及其编译器(没有非标准选项)是一致的,那么应该没有问题。
  • @MikeSeymour 很公平,并且可能这样的任何问题都不会那么难以检测/解决。但是,例如使用 gcc 文档,我看不到任何地方说启用 -Werror 会将其变成不合格的编译器。我会认为任何导致与标准有偏差的事情都会有据可查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多