当前位置: 首页 > 知识库问答 >
问题:

C 中未定义的行为 [重复]

薛滨海
2023-03-14

在本网站的最后一节中,他们提供了 f(i = -1, i = -1) 作为由于函数参数中子表达式的未排序求值而导致的未定义行为的示例。但是,由于在计算所有函数参数和函数指示符之后,在实际函数调用之前,存在一个序列点,因此将始终使用 (-1, -1) 调用 f,并且分配到 -1。有没有可能不发生这种情况?

共有2个答案

伍嘉
2023-03-14

这是未定义的行为,因为标准是这么说的。在修改之间没有序列点的情况下修改变量是UB。该规则不存在“除非两个修改设置了相同的值”的例外。

邓星光
2023-03-14

…评价后有顺序点

事实上。评估后,所以它没有好处。这里的问题是,在序列点之前,i上有两个未排序的副作用。它正式是UB。

 类似资料:
  • 本文向大家介绍C++未定义行为(undefined behavior),包括了C++未定义行为(undefined behavior)的使用技巧和注意事项,需要的朋友参考一下 衡量一个人是否真正活着的根本方法,就是看他是否有意愿、有能力做出主动的选择。 在计算机程序设计中,未定义行为(undefined behavior)是指行为不可预测的计算机代码。这是一些编程语言的一个特点,最有名的是在C语言

  • 我知道下面是未定义的,因为我试图在同一表达式中读写变量的值,即 但如果是这样,为什么下面的代码片段不是未定义的? 因为在这里,我也试图修改的值并同时写入它。 还请解释为什么标准没有纠正或删除这种未定义的行为,尽管他们知道这是未定义的?

  • 尽管标题出现了,但这并不是一个哲学问题。 从未初始化的数组读取 使用错误数据 使用不可移植构造。(即内存分配的细节1) 导致具有的行为 标准没有要求产生可预测的效果 我会称之为“未定义的行为”。但也许我错过了什么(?) null null

  • 例如,我们希望通过索引访问C结构的成员。可以使用联合体方便地实现: 不幸的是,从不是最近写入的联合成员中读取是未定义的行为。也就是说,我还没有发现任何编译器或平台不能像预期的那样工作。你能告诉我称之为未定义行为而不是将其标准化的基本原理是什么吗?

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误,如何修复? 试图通过 我得到一个错误: main.cpp 搞砸h文件: 有什么想法吗?使用此函数构建具有设置大小的哈希表。 编辑:散列。cpp文件 正在尝试通过以下终端进行编译: g-c Hash.cpp-o Hash. o g-omain.cpphash. o-std=c 0x 不知怎的,它进入了一个无限循环。

  • 我已经让Babel和Gulp运行和背景,他们工作正常。我注意到,当我添加React CDN时,在从JSX文件中删除以下内容后,问题就消失了。 我没有使用npx create-react-app my-app命令,因为这是一个我已经在做的项目,而是安装了Babel,配置了它,将它添加到Gulp,安装了react、react-dom和react-scripts。 下面是我的目录结构: 对我来说,使用C