- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我读过,Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc...)并尝试理解 Sequence points on "comp.lang.c FAQ"在浪费了 2 个多小时的时间试图通过 gcc 编译器解释以下结果之后。
expression(i=1;j=2) i j k
k = i++ + j++; 2 3 3
k = i++ + ++j; 2 3 4
k = ++i + j++; 2 3 4
k = ++i + ++j; 2 3 5
k = i++ + i++; 3 2
k = i++ + ++i; 3 4
k = ++i + i++; 3 4
k = ++i + ++i; 3 6
i = i++ + j++; 4 3
i = i++ + ++j; 5 3
i = ++i + j++; 4 3
i = ++i + ++j; 5 3
i = i++ + i++; 4
i = i++ + ++i; 5
i = ++i + i++; 5
i = ++i + ++i; 6
问题:
我想知道上图中显示的所有表达式(4 组)是否都有未定义的行为?如果它们中只有一些具有未定义的行为,哪些有哪些没有?
对于已定义的行为表达式,请您展示(而不是解释)编译器如何评估它们。只是为了确保我是否正确地获得了这个预增量和后增量。
背景:
今天,我参加了一次校园面试,要求我解释给定 i
值时 i+++++i
的结果。在gcc中编译那个表达式后,我意识到我在面试中给出的答案是错误的。我决定以后不再犯这样的错误,因此尝试编译前后增量运算符的所有可能组合,并在 gcc 中编译它们,然后尝试解释结果。我挣扎了2个多小时。我找不到评估这些表达式的单一行为。所以,我放弃了,转向stackoverflow。一点点阅读文件后,发现有类似 sequence point
和未定义行为的东西。
最佳答案
除了第一组,其他三组的所有表达式都有未定义的行为。
如何评估定义的行为(第 1 组):
i=1, j=2;
k=i++ + j++; // 1 + 2 = 3
k=i++ + ++j; // 1 + 3 = 4
k=++i + ++j; // 2 + 3 = 5
k=++i + j++; // 2 + 2 = 4
这很简单。后增量与前增量。
在第 2 组和第 4 组中,很容易看到未定义的行为。
第 2 组具有未定义的行为,因为 =
运算符未引入序列点。
关于c - 以下哪些后自增和预自增运算符的组合在 C 语言中具有未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13615243/
1、修改数据 复制代码代码如下: DataRow dr =
数据库操纵基本流程为: 1、连接数据库服务器 2、选择数据库 3、执行SQL语句 4、处理结果集 5、打印操作信息 其中用到的相关函数有 •resource m
CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了
项目结构: 添加页面: &
本文实例讲述了android操作sqlite数据库(增、删、改、查、分页等)及listview显示数据的方法。分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识
我是一名优秀的程序员,十分优秀!