博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言在windows下和Mac下的不同表现!
阅读量:5251 次
发布时间:2019-06-14

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

最近给一个等级考试的C语言培训班上课,学生问起一些++的问题。让我好生为难。因为这些不同的编译器处理方式,在不同的系统下表现并不一致。

不管你洋洋洒洒论述多么一大篇,在事实面前就一下显得苍白了。虽然这样的代码在工程中是不提倡的,但是考试又不得不面对。

例1:

a=1;

b=++a+++a+++a;

问,执行完之后,b和a的值是多少?

首先,上面第二个表达式,在WINDOWS下是无法通过编译的,会报告a+++a这样的表达式 lvalue required as increment operand

在Mac下也无法通过编译,报告的错误是: Expression is not assignable

需要修改为:b=++a+(++a)+(++a);

在WINDOWS下,VC6中,包括mingw32-gcc.exe(GCC)中,运算的结果是10,4。

但是在Mac中,运算的结果是:9,4。

原因是在windows 下,总是先算++a+(++a),而且是先递增两次a,变成3,然后再算两个3之和为6,然后再算+(++a)的值,加上4,于是得到10.

而mac 下似乎更符合我们对C的认知,是先执行2+3+4=9;

 

例2:

a=1;

b=a+++a+++a++;

执行结果也不同,windows下结果是3,4;

mac下是6,4;

 

 

 

转载于:https://www.cnblogs.com/softman11/p/3368162.html

你可能感兴趣的文章
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
C++循环单链表删除连续相邻重复值
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
ASP.NET使网页弹出窗口不再困难
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
windown快速安装xgboost
查看>>
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>