APP下载

C 语言程序的理解与编译优化

2020-08-07吴元斌

现代计算机 2020年18期
关键词:程序语言

吴元斌

(重庆三峡学院计算机科学与工程学院,重庆404000)

0 引言

在多年的C 语言教学实践中发现,不少初学者对C 语言中运算求值存在一些模糊认识。很多人认为C语言的算术表达式求值顺序与数学中算术表达式的求值顺序相同,即先乘除、后加减。C 语言标准规定了运算符间的优先级及同级运算的结合性[1],也是乘除运算的优先级高于加减运算,因此对于表达式a+b-c*d,其运算顺序看起来是:*、+、-,但事实上并非如此。

一些习题包括一个变量多次自增(或自减)求和的表达式,如:(a++)+(a++)。C 语言并没有规定这两个自增运算与相加的求值顺序。通常的理解是:先求左边自增的值,再求另右边自增的值,最后将两个值相加,但实际上,有些编译器进行了优化:先进行两次自增,然后再将两个a 相加。还有其它依赖于编译器的问题,出现在习题或思考题甚至考试题中。这种情况是应该避免的,因此程序的运行结果是依赖于编译器的,在不同的编译器下运行结果可能不同。

为了清楚的理解C 语言教学中存在的一些编译相关的问题,使初学者编写与不依赖于编译器的C 语言程序,本文将列举一些典型的C 语言示例程序,给出了它们在集成开发环境Eclipse + MinGW GCC、LCCWin32 以及在Visual Studio 2019 下的运行结果对比。由于多数示例程序的运行结果存在一些差异,进一步展示、对照和分析了源程序在开源编译器MinGW GCC和LCC 下目标程序的反汇编程序,目标程序的反汇编程序是利用Eclipse+MinGW GCC、LCC-Win32 两种集成开发环境调试程序环境下得到的。……

登录APP查看全文

猜你喜欢

程序语言
语言是刀
试论我国未决羁押程序的立法完善
让语言描写摇曳多姿
失能的信仰——走向衰亡的民事诉讼程序
“程序猿”的生活什么样
多向度交往对语言磨蚀的补正之道
英国与欧盟正式启动“离婚”程序程序
创卫暗访程序有待改进
我有我语言
恐怖犯罪刑事诉讼程序的完善