【问题标题】:Is it standard-compliant to compile ill-formed program in success?成功编译格式错误的程序是否符合标准?
【发布时间】:2018-02-11 03:45:42
【问题描述】:

对于格式不正确的 C++ 程序,例如:

foo^@#$bar%$

编译器生成带有诊断消息的已编译二进制文件是否符合标准,而不是像 g++/clang++ 那样中断编译?

intro.compliance 声明:

如果程序包含违反任何可诊断规则或 本标准中描述的构造的出现 当实现不支持时“有条件支持” 该构造,一个符合要求的实现应至少发出一个 诊断信息。

在这种情况下不需要编译错误。

可能相关:

【问题讨论】:

    标签: c++ language-lawyer


    【解决方案1】:

    是的,当输入是格式错误的程序时,实现生成二进制文件是合法的。这是 C++14 中的 [intro.compliance]/8:

    一个符合标准的实现可以有扩展(包括额外的库函数),只要他们这样做 不改变任何格式良好的程序的行为。诊断程序需要实现 使用根据本国际标准格式错误的扩展。然而,这样做之后, 他们可以编译和执行这样的程序。

    在这种情况下,诊断通常被称为“警告”(而不是“错误”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多