- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
C99 §6.5 表达式
(1) An expression is a sequence of operators and operands that specifies computation of a value, or that designates an object or a function, or that generates side effects, or that performs a combination thereof.
(2) Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression.72) Furthermore, the prior value shall be read only to determine the value to be stored.73)
带脚注
72) A floating-point status flag is not an object and can be set more than once within an expression.
73) This paragraph renders undefined statement expressions such as
i = ++i + 1;
a[i++] = i;while allowing
i = i + 1;
a[i] = i;
其中 C11 §6.5 更改为((1) 的文本有附录):
(1) […] The value computations of the operands of an operator are sequenced before the value computation of the result of the operator.
(2) If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined. If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.84)
其中 C11 中的脚注 84 与 C99 中的脚注 73 相同。
我有点困惑……我将 C11 (2) 读为“[……](对同一标量对象的不同副作用)或(使用同一标量对象的值的值计算)[……] "这似乎甚至不允许 foo =++i
(有一个副作用,我们根据更改的对象使用一个值)。不过,我不是母语人士,所以如果有人能告诉我应该如何“解析”这句话就好了。 C99我看得懂,但C11的写法我不是很懂。
无论如何,真正的问题是:这是从 C99 到 C11 的变化,还是这些措辞等同?如果是这样,为什么它被改变了?如果不是,有人可以举例说明在 C99 中是 UB 而在 C11 中不是,反之亦然吗?
最佳答案
C11(以及 C++11)完全修改了排序的措辞,因为 C11 现在有了线程,它必须解释访问相同数据的线程之间的排序意味着什么。委员会的目的是在只有一个执行线程的情况下保持与 C99 的向后兼容。
让我们看一下C99版本:
Between the previous and next sequence point
an object
shall have
its stored value modified at most once
by the evaluation of an expression.
与新文本相比
If a side effect on
4的不同术语,修改存储值
a scalar object
对2中之前措辞的限制,新的文字只说关于标量对象的一些东西
is unsequenced relative to either
unsequenced 是 1 中概念的概括。这两个语句由一个序列点分开。想想两个修改的线程相同的数据而不使用锁或类似的东西。
a different side effect on the same scalar object
对象只允许修改一次
or a value computation using the value of the same scalar object,
或者值的读取可能不会与修改同时出现
the behavior is undefined.
3. 中的“shall”是含蓄地说的。如果他们没有实现。
关于c - 序列点和副作用 : Quiet change in C11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066593/
psql 有一个 -q/--quiet 选项(环境变量 QUIET)。 pg_restore 没有安静选项。有没有办法让 pg_restore 不详细显示它正在执行的 SQL 命令? # e.g.,
我的目的是将表单中的数据提交到服务器,而不是重新加载页面。它甚至不需要显示更新的数据。我正在使用 Firefox 进行开发,我正在寻找两种途径来获得我想要的东西: 我发现,如果我在表单中放置一个按钮,
git fetch --quiet &>/dev/null & 仍在写入 stdout 以询问用户名。是否有任何解决方法来存档它。 编辑:添加细节我有一个自定义脚本来显示 git 状态(bash-gi
在向 CLI 工具添加一些普遍支持的选项时,我最后想知道:大多数人期望从 --quiet 选项中得到什么行为? 更具体地说,关于: 错误? 对用户有值(value)的输出? (例如 grepped 内
我正在使用订阅者/通知者模式在 C# 中引发和使用来 self 的 .Net 中间层的事件。一些事件以“突发”方式引发,例如,当数据从导入文件的批处理程序中持久化时。这会执行一个可能长时间运行的任务,
我有一个 Makefile 用长长的命令行构建了许多 C 文件,我们通过以下规则清理了输出: .c${MT}.doj: @echo "Compiling $<";\
因此,我正在编写一个 powershell 脚本,除其他外,它会检查您是否在 Exchange 通讯组中,并在必要时添加您。 让它变得棘手的一件事是,脚本从“不可靠”的来源获取数据。也就是说,我不能保
我正在尝试匹配SSH命令的输出,但是由于某种原因,它无法正常工作。我正在使用authorized_keys将登录限制为一个命令-这是一个带有参数的包装器脚本。 这是我的代码: for i in `se
我目前正在学习 pytest 并浏览文档,不清楚什么是“安静”模式以及使用它的原因是什么。谁能给我澄清一下? 在文档中,我看到它用 -q 表示,如下所示: $ pytest -q test_sysex
C99 §6.5 表达式 (1) An expression is a sequence of operators and operands that specifies computation of
如何检测makefile是否存在 --silent / --quiet 设置了命令行选项? 相关问题: how to detect if --quiet option is specified wit
我正在尝试编写一组函数来检查缺少的 R 包,并在必要时安装它们。 StackOverflow 上有一些很好的代码可以做到这一点:start here . 我想让函数尽可能安静,特别是因为 R 甚至会以
我的问题有点像 Nagle algorithm是为了解决问题而创建的,但不完全是。我想要的是缓冲 OnNext来自 IObservable 的通知进入 IObservable> 的序列就像这样: 当第
我遇到的情况是,我们已经从内部处理所有通知切换到使用 Azure 中的通知中心。到目前为止,它运行良好,并且更加可靠。 现在有一个请求,要求每个移动设备都能够仅为我的应用程序定义“安静时间”。我知道有
我想重新加载一个页面,这样它就不会引起整页刷新的效果,比如在页面的选项卡上显示“正在加载...”。 这是我目前的代码。我的理论是我可以覆盖 body带有 的部分更新网站的包装版本,通过GM_xmlh
这个问题在这里已经有了答案: Can git operate in "silent mode"? (4 个答案) 关闭 5 年前。 git 输出对我来说非常冗长。如何默认为 git 中的所有命令设置
我知道 if(value==value) 可以解决问题,但在我的应用程序中我有 50 多个变量需要检查,检查每个变量有点乏味而且可能效率低下。理想情况下,我正在寻找的是在子程序结束之前我可以调用一个函
为了编写 pythonic 代码,我想知道是否有一个风格指南涵盖了函数的安静或冗长选项的使用。 例如,在我的 Python 包中,我有一系列相互调用的函数,因此用户希望能够不时请求打印输出。 例如:
我正在用 Python 编写 Mercurial 扩展,需要使用 Mercurial API 调用“拉”命令,但我想使用 --quiet 标志抑制其输出。 在 Hg 术语中,我想执行以下代码,但是是在
我正在处理命令行 python 脚本 - 在整个脚本中,我有很多信息正在打印到终端窗口,以便我可以跟进正在发生的事情。 使用 OptionParser 我想添加一个 --quiet 选项,这样我就可以
我是一名优秀的程序员,十分优秀!