成功地编译成格式的程序是符合标准的

Is it standard-compliant to compile ill-formed program in success?

本文关键字:标准 程序 成功 编译 格式      更新时间:2023-10-16

对于不形成的C 程序,例如:

foo^@#$bar%$

编译器的标准符合条件是通过诊断消息收集二进制的二进制文件,而不是将编译中断为G /Clang 做?

Into.comliance 说明:

如果程序包含违反任何可诊断规则或 在此标准中描述的构造的发生 当实施不支持时,"有条件支持" 该结构,一个符合的实施应至少发行 诊断消息。

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

可能相关:

  • 根据标准,C 编译器需要进行什么?
  • 不形成不良,无需诊断(NDR):constexpr函数C 14

是的,实施在输入是不形式的程序时产生二进制文件是合法的。这是C 中的[Into.comliance]/8:

符合符合的实现可能具有扩展(包括其他库功能),只要它们确实 不要改变任何形式的计划的行为。需要实现来诊断程序 使用根据该国际标准不形成不良的扩展。但是,这样做了 他们可以编译和执行此类程序。

在这种情况下,诊断通常称为"警告"(与"错误"相对)。