编译器某些代码基本计算顺序小解

来源:本站
导读:目前正在解读《编译器某些代码基本计算顺序小解》的相关信息,《编译器某些代码基本计算顺序小解》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《编译器某些代码基本计算顺序小解》的详细说明。
简介:问:下面的代码int i=7; printf("%dn", i++ *i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗?

尽管后缀自加和后缀自减操作符++ 和-- 在输出其旧值之后才会执行运算,但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表达式“完成” (按照ANSI C 的术语, 在下一个“序列点” 之前) 之前的某个时刻进行。本例中, 编译器选择使用变量的旧值相乘以后再对二者进行自增运算。

包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后又被引用的自增, 自减和赋值操作符的任何组合。这是一个粗略的定义) 甚至都不要试图探究这些东西在你的编译器中是如何实现的(这与许多C 教科书上的弱智练习正好相反); 正如K&R 明智地指出, “如果你不知道它们在不同的机器上如何实现, 这样的无知可能恰恰会有助于保护你。”

提醒:《编译器某些代码基本计算顺序小解》最后刷新时间 2024-03-14 01:00:17,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《编译器某些代码基本计算顺序小解》该内容的真实性请自行鉴别。