如果违反了“应/不应”要求,那么该要求位于哪个部分(例如语义、约束)是不是重要?

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 上修复“违反家庭政策要求”

为啥 HPX 要求未来的“那么”成为 DAG(有向无环图)的一部分?

导航选项卡或部分视图哪个更好?

UNITY自带的SHADER放在哪个目录的

最近在学cadence画板子,感觉布线好麻烦啊!该怎么布线,先哪个后哪个?