对于一个不正常的C ++程序,如:
foo^@#$bar%$
编译器是否符合标准,是否可以生成带有诊断消息的已编译二进制文件,而不是像g ++ / clang ++那样中断编译?
intro.compliance 声明:
如果程序包含违反任何可诊断规则的行为或 本标准中描述的构造的发生 当实施不支持时,“有条件支持” 该构造,符合要求的实施应至少发布一个 诊断信息。
在这种情况下不需要编译错误。
可能相关:
答案 0 :(得分:5)
是的,当输入是一个格式错误的程序时,生成二进制文件的实现是合法的。这是C ++ 14中的[intro.compliance] / 8:
符合要求的实现可能具有扩展(包括其他库函数),只要它们可以 不改变任何格式良好的程序的行为。诊断程序需要实现 根据本国际标准使用不正确的扩展。但是,这样做了 他们可以编译和执行这样的程序。
在这种情况下,诊断通常被称为“警告”(而非“错误”)。