博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C语言解惑》—— 3.4 注意编译系统的差别
阅读量:6169 次
发布时间:2019-06-21

本文共 861 字,大约阅读时间需要 2 分钟。

本节书摘来自华章出版社《C语言解惑》一 书中的第3章,第3.4节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 注意编译系统的差别

【例3.7】程序的运行结果取决于编译系统的例子。

#include  
void main(){ int a=65135; double i=8256.67; a=(int)i+a; printf("\n%d,%f",a,i);}

如果使用VC,输出结果为“73391,8256.670000”。如果使用Borland C++,则输出为“7855,8256.670000”。这是因为前者为int分配4个字节;后者为int分配2个字节,结果a=-401,变成了8256-401=7855。如果将声明改为

long a=65135;
对VC来说,并没有影响。但对Borland C++来说,虽然计算结果对了,但输出函数printf的参数不匹配,仍然得不到正确结果。如果将它改为格式
printf("n%ld,%f",a,i);
则Borland C++也能得到正确结果。
由此可见,编程时还要考虑自己的使用环境,不能生搬硬套。
写程序时,也要注意不同编译系统的区别。
【例3.8】运行结果取决于编译系统的例子。

#include 
void main(){ int m=5; printf("\n%d,%d",m,m++);}

这个程序使用m的方式会产生歧义。因为在调用函数时,C标准并没有规定实参数的求值顺序。m和m++是两个表达式的值。VC是自左而右求值,先使用m,然后自增1,所以输出是“5,5”;Borland C++是自右而左求值,第一个m为5,但它使用之后变为6,将6作为第二个m值,所以输出是“6,5”。

在编程时,应避免使用可能产生歧义的语句,更不要写别人看不懂,也不知道系统如何执行的程序。尤其是使用“++”和“--”时,更要小心。

转载地址:http://nrnba.baihongyu.com/

你可能感兴趣的文章
Linux下的内核测试工具——perf使用简介
查看>>
《从问题到程序:用Python学编程和计算》——2.3 内置函数和数学函数包
查看>>
《Photoshop修饰与合成专业技法》目录—导读
查看>>
《Metasploit渗透测试手册》—第1章1.10节分析数据库中存储的渗透测试结果
查看>>
《Adobe Acrobat XI经典教程》—第2课减小文件大小
查看>>
《数据库技术原理与应用教程》一第2章 数据库的基础知识
查看>>
QuaggaJS —— 纯 JavaScript 开发的条形码扫描
查看>>
在图片中加入噪点就能骗过 Google 最顶尖的图像识别 AI
查看>>
免费下载!业界首部安卓热修复宝典出炉,阿里技术大牛联袂推荐
查看>>
OpenID 关联认证提供 CoreOS dex
查看>>
《Node.js区块链开发》一2.2 信用,决定着利益转移的方向
查看>>
Speedy:来自京东的 Docker 镜像存储系统
查看>>
《动手玩转Arduino》——11.2 众多的Arduino板
查看>>
IBM Watson 进入癌症基因组分析市场
查看>>
在 Linux 中查看你的时区
查看>>
Linux集群和自动化维1.6 小结
查看>>
《OpenACC并行编程实战》—— 第1章 并行编程概览 1.1 加速器产品
查看>>
C语言OJ项目参考(2417) 字符串长度
查看>>
ajax的手写、封装和自定义设置
查看>>
class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist
查看>>