“严格符合程序”+没有扩展是否意味着“没有发出诊断信息”?
后续问题:clang: <string literal> + <expression returns int> 导致混淆警告:将 'int' 添加到字符串不会附加到字符串。
“严格符合程序”+ 没有扩展是否意味着“没有发出诊断信息”?
原因:更好地理解术语“严格遵守程序”。
回答
即使程序符合要求,实现也可能生成诊断信息。
关于诊断的C 标准第 5.1.1.3p1 节规定:
如果预处理翻译单元或翻译单元违反任何语法规则或约束,即使该行为也明确指定为未定义或实现,则一致实现应产生至少一个诊断消息(以实现定义的方式标识)定义。在其他情况下不需要产生诊断消息。9)
- 目的是实现应识别每个违规行为的性质,并在可能的情况下进行定位。 当然,只要有效程序仍被正确翻译,实现就可以自由地产生任意数量的诊断。 它也可能成功翻译无效程序
脚注 9 中的粗体部分指出可能会产生额外的诊断结果。