如果违反了“应/不应”要求,那么该要求位于哪个部分(例如语义、约束)是不是重要?
Posted
技术标签:
【中文标题】如果违反了“应/不应”要求,那么该要求位于哪个部分(例如语义、约束)是不是重要?【英文标题】:If "shall / shall not" requirement is violated, then does it matter in which section (e.g. Semantics, Constraints) such requirement is located?如果违反了“应/不应”要求,那么该要求位于哪个部分(例如语义、约束)是否重要? 【发布时间】:2021-12-05 22:24:04 【问题描述】:如果违反了“应该/不应”的要求,那么该要求位于哪个部分(例如语义、约束)是否重要?
问题原因:此观点:
这是标准的语义部分,而不是约束,因此不需要诊断。
是否违反语义部分中的“应/不应”要求不需要诊断?
【问题讨论】:
参见第 5.1.1.3 节。随心所欲地解释,但 imo 引用是正确的。 【参考方案1】:语义违规不需要需要诊断消息,而约束违规则需要。
C11 standard 关于诊断的第 5.1.1.3p1 节规定如下:
符合要求的实现应至少产生一个诊断 消息(以实现定义的方式标识)如果 预处理翻译单元或翻译单元包含一个 违反任何语法规则或约束,即使行为是 也明确指定为未定义或实现定义。 在其他情况下不需要生成诊断消息。
【讨论】:
【参考方案2】:标准只是非常松散地定义了“语义”的实际含义。最重要的是,标准的第 3 节术语、定义和符号中没有对术语的定义。
标准做什么在该部分中定义的是“约束”的含义:
3.8
1 约束
限制,无论是句法或语义,通过它的阐述 语言元素将被解释
增加了对“...或语义”的强调。
然后标准继续:
4.一致性
1 在本文档中,“应”被解释为对实现或程序的要求;相反,“shall not”将被解释为禁止。
2 如果违反了出现在约束或运行时约束之外的“应”或“不应”要求,则行为未定义。
然后我们来:
5.1.1.3 诊断
1 如果预处理翻译单元或翻译单元包含违反任何语法规则或约束,则符合要求的实施应产生至少一个诊断消息(以实施定义的方式标识),即使该行为也明确指定为未定义或实现定义。
增加了对“...或约束”的强调。
根据 3.8,“仅”是一个语义限制并不排除某些东西是一个约束。
根据 4. 1),“应”是要求,“不应”是禁止。
我将两者都解释为表示约束。
根据 5.1.1.3,不仅违反语法规则,而且违反 约束 需要诊断,即使(根据 4. 2))“[...] 行为也是明确指定为未定义或实现定义。”
但请注意,避免误解:
我在这里指的是语义在标准中用“shall”/“shall not”指定,不是任何程序的任何语义。
【讨论】:
以上是关于如果违反了“应/不应”要求,那么该要求位于哪个部分(例如语义、约束)是不是重要?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google Playstore 上修复“违反家庭政策要求”