++i, i++, printf 和 程序的可移植性 问题

来源:互联网 发布:微信兼职任务平台源码 编辑:程序博客网 时间:2024/05/04 18:40

今天突然发现了一个问题

#include <stdio.h>int main(int argc, char* argv[]){    int i = 0;    i = 0;    printf("%d,%d,%d,%d\n",i, i++,++i,i);    i = 0;    printf("%d,%d,%d,%d\n",i, ++i,i++,i);    return 0;}
为什么这个程序 的输出结果是

2,1,2,2
2,2,0,2


首先,应该说明的是在不同的编译环境中结果是不一样的。

关于本段代码在VC++6.0中的规则如下:

1、printf函数的执行顺序是由右到左的
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的***



最后发现没有混淆++i和i++的使用,反而发现了printf的问提。看来以后为了程序的可移植性,小心使用++i,i++,printf.

顺便在这分享一下我记忆++i和i++的技巧:

(++i):加号在前,先加后用

(i++):加号在后,先用后加

原创粉丝点击