现在的位置: 首页 > 综合 > 正文

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

2013年10月10日 ⁄ 综合 ⁄ 共 473字 ⁄ 字号 评论关闭

今天突然发现了一个问题

#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++):加号在后,先用后加

抱歉!评论已关闭.