标签搜索

关于C语言使用printf的问题-编译系统求值时读取的顺序

Toanle
2021-03-09 / 0 评论 / 19 阅读 / 正在检测是否收录...

今天在学习C语言的时候写到了如下的两端代码,简单来看,我一开始以为应该是一样的输出结果的,但是并不是这样。

#include <stdio.h>
int main()
{
    int i=8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
    return 0;
}

代码段1与其执行结果:
IMG_20210309_223504.jpg

代码段2:

#include <stdio.h>
int main()
{
    int i=8;
    printf("%d\n",++i);
    printf("%d\n",--i);
    printf("%d\n",i++);
    printf("%d\n",i--);
    printf("%d\n",-i++);
    printf("%d\n",-i--);
    return 0;
}

代码段2与其执行结果:
IMG_20210309_223807.jpg

一开始我是非常蒙的,但是后来网上找了一些资料以后发现,不同的编译器的求值的编译顺序是不同的。
我使用的编译器是gcc,它的计算的顺序(注意:不是输出的顺序。)是从右往左的,网上看到的是说C语言的压栈顺序是从右往左。
像代码段1的运算过程就是:

i=8 → 输出-i → i=i-1 → 输出-i → i=i+1 → 输出i → i=i-1 → 输出i → i=i+1 → i=i-1 → i=i+1 → 输出i(即在一段运算中++i与--i的值与i的最终值相同)。
而代码段2就是直接一个一个的输出,就是很正常的值了。
OwO,关于

即在一段运算中++i与--i的值与i的最终值相同

0

评论 (0)

取消