成功编译不良程序是否符合标准?

时间:2017-09-02 06:17:55

标签: c++ language-lawyer

对于一个不正常的C ++程序,如:

foo^@#$bar%$

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

intro.compliance 声明:

  

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

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

可能相关:

1 个答案:

答案 0 :(得分:5)

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

  

符合要求的实现可能具有扩展(包括其他库函数),只要它们可以   不改变任何格式良好的程序的行为。诊断程序需要实现   根据本国际标准使用不正确的扩展。但是,这样做了   他们可以编译和执行这样的程序。

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