【发布时间】:2020-08-22 12:20:49
【问题描述】:
C99 标准:
在上一个序列点和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次
C11 标准:
如果一个标量对象的副作用相对于同一标量对象的另一个副作用是未排序的,则行为未定义。
C99 标准的这个定义是否不完整,因此它在 C11 中进行了更新,因为它只包含术语 object 而不是 scalar object?
【问题讨论】:
-
在多线程的上下文中,可能与 C11 内存模型的改进有关
-
Afaik,C11 标准通常避免使用术语“序列点”。我相信它被认为与优化器(太严格)和可用性(我相信多线程是一个主要问题)交互不好。措辞的变化基本上用相对顺序的新概念取代了这个术语。
-
@cmaster-reinstatemonica 不,我相信这是由 C++11(C++14?)程序员创造的一些神话。序列点遍布 C11,在规范性文本中,以及总结它们的信息性附录 C。有时 C11 会说“sequenced before/after”,有时会说“有一个序列点”。
-
也许您可以在other question 之前添加您的示例,以向其他人说明您对其他人的全部关注,正如我们在comments 中讨论的那样。
-
@RobertS 支持 Monica Cellio stackoverflow.com/a/61650429/13469230
标签: c object language-lawyer c99 c11