C/C++中的++问题

++符号是C/C++之中非常有趣的,前段时间发现一个很好玩的算式,在TC和VC下面获得不同的结果。

i=0; i=(++i)+(++i)+(++i);
熟悉C语言的能够分析一下,首先是i=0,i的初值为0,第二步是很多个+号,我们大致可以推导下它的运行过程:先运行第一个++i,i=1,然后++i,i=2,继续++i,i=3,最后再进行+计算,即3+3+3=9,按照传统的C语言来推算,答案应该是9。

通过WIN_TC我们可以测试


得到的结果没错,是9


不过在VC我们却得到一个很奇怪的答案


一模一样的程序来着


答案是7。

在VC在运行的顺序是++i,++i,然后运行+的计算,然后在++i,再+的计算,即2+2+3=7。

如果在添加一个++在VC与TC下还是存在区别,一个是4+4+4+4=16,2+2+3+4=11。

刚被帅哥提醒下,去看了一下完整表达式和非完整表达式,在C Primer Plus中间有比较好的解释

副作用(side effect)是对数据对象或文件的修改。例如,语句:states=50;的副作用是将states的值设为50,从C的角度来看,主要目的是对表达式求值,给C一个表达式4+6,C将计算它的值为10.给C一个表达式states=50,C将计算它的值为50.计算这个表达式的副作用就是把变量的states的值改变为50.跟赋值运算符一样,增量运算符和减量运算符也有副作用,它们由于副作用而被使用。

一个顺序点(sequence point)是程序执行中的一点:在该点处,所有的副作用都在进入下一步前被计算。在C中,语句里的分号标志了一个顺序点,它意味着在一个语句中赋值运算符,增量运算符及减量运算符所作的全部改变必须在程序进入下一个语句前发生。

完整表达式是这样一个表达式-它不是一个更大的表达式的子表达式。完整表达式的例子包括一个表达式的语句里的表达式和在一个while循环里作为判断条件的表达式。

顺序点帮助阐明后缀增量动作何时发生。例如,考虑下面代码

while(guests++ <10) printf("%d\n",guests);

有时C的初学者会摄像在本程序中”先使用该值,然后增加它的值"的意思是在使用了printf()语句后再增加guest的值。然而,因为guest++<10是while循环的判断条件,所以它是一个完整表达式,这个表达式的结束就是一个顺序点。因此,C保证副作用(增加guest的值)在程序进入printf()前发生。同时使用后缀形式保证了guest在与10比较后才增加。

现在考虑这个语句

y=(4+x++)+(6+x++);

表达式4+x++不是一个完整表达式,所以C不能保证在计算子表达式4+x++后立即增加x。这里,完整表达式是整个赋值语句,并且分号标记了顺序点,所以C能保证的是在程序进入后续语句前x被增加两次。C没有指明x是在每个子表达式被计算后增加还是在整个表达式被计算后增加,这就是我们要避免使用这类语句的原因。



                
在VS Code上配置C/C++环境可以让你在Mac上进行C/C++的开发。下面是配置步骤: 1. 安装VS Code:首先,你需要在Mac上安装VS Code。你可以从VS Code官方网站下载并安装最新版本的VS Code。 2. 安装C/C++扩展:打开VS Code,点击左侧的扩展图标(或按下快捷键Ctrl+Shift+X),在搜索框中输入"C/C++",找到并安装Microsoft的C/C++扩展。 3. 安装编译器:在Mac上,你可以使用GCC或Clang作为C/C++的编译器。如果你还没有安装编译器,可以通过以下步骤安装: - 安装Xcode:打开App Store,搜索并安装Xcode。安装完成后,打开Xcode,按照提示完成初始化设置。 - 安装命令行工具:打开终端(Terminal),运行以下命令安装命令行工具: ``` xcode-select --install ``` 4. 配置编译器路径:打开VS Code,点击左下角的齿轮图标,选择"Settings"。在搜索框中输入"C++",找到"C++: Compiler Path"选项,点击"Edit in settings.json",在打开的文件中添加以下内容: ``` "C_Cpp.default.compilerPath": "/usr/bin/gcc" ``` 5. 创建C/C++项目:在VS Code中,点击左侧的资源管理器图标(或按下快捷键Ctrl+Shift+E),选择一个文件夹作为你的项目目录。然后,点击左上角的"终端"菜单,选择"新建终端"。在终端中,你可以使用命令行工具来创建和编译C/C++项目。 以上就是在VS Code上配置C/C++环境的步骤。如果你按照以上步骤进行配置,你就可以在Mac上使用VS Code进行C/C++的开发了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值