【发布时间】:2021-12-08 03:41:00
【问题描述】:
ISO/IEC 9899:202x (E) 工作草案 - 2020 年 12 月 11 日 N2596,5.1.1.3 诊断,1:
符合要求的实现应产生至少一个诊断消息(在 实现定义的方式)如果预处理翻译单元或翻译单元包含 违反任何语法规则或约束,即使行为也明确指定为未定义或实现定义。在其他情况下不需要生成诊断消息。
后果:语义违规不需要诊断。
问题:“语义违规不需要诊断”的(可能)基本原理是什么?
【问题讨论】:
-
如果您尝试制定“语义违规”是什么,您会意识到它在很大程度上取决于 a) 实际输入和 b) 程序员的意图。编译器也无法确定。
-
@DevSolar 是否意味着在 ISO/IEC 9899:202x 中,在 6.9.2 外部对象定义中“如果对象标识符的声明是暂定定义并且具有内部链接,则声明的类型不应是不完整的类型”放在错误的部分:语义而不是约束?
-
我会在你之前的问题中回答,因为我觉得这是一个错误答案的后续问题(XY问题)。
-
完成其他答案。您可能会注意到,这里的所有答案(以及我最初的评论)都将“语义”误认为是完全不同的东西——程序的意图。
标签: c language-lawyer diagnostics standards-compliance c17