我有些困惑关于N1570 C11草案中
对于其他参考,请参见DR#176。
5.1.1.3/1
Diagnostics子句的语义(强调是我的):
我理解这个意图是排除(非约束性的)未定义行为(因此没有缓冲区溢出等诊断),但是对于即使行为也被明确指定为未定义或实现定义,符合规范的实现必须生成至少一条诊断消息(以实现定义的方式标识),如果预处理翻译单元或翻译单元包含任何语法规则或约束的违反,则应生成至少一条诊断消息。 在其他情况下不需要生成诊断消息。9
#error
编译指令呢?就像在6.10.5/1
Error directive中所述:
这两个子句是否不相互排斥?形式为
# error
pp-tokensopt new-line的预处理指令会导致实现生成包括指定的预处理标记序列的诊断消息。
对于其他参考,请参见DR#176。
#error
应该总是生成一条诊断消息,但这在前面的子句中没有提到。 - Drew McGowen5.1.1.3/1
)意味着“需要符合实现”,而这个子条款是规范性的。 - Grzegorz Szpetkowski