首页 > 解决方案 > 我无法弄清楚这段代码是如何产生这个输出的

问题描述

我无法理解,为什么这段代码会产生这个输出。谁能帮我这个??

#include <stdio.h>

int main( void )
{
    int num = 5;

    printf( "%d %d %d", num, ++num, num++ );
}

输出将是7 7 5(而不是5 6 7

标签: c

解决方案


产生副作用的顺序与其他编译器中的顺序相同。

依赖于副作用评估的顺序是不安全的。例如,像这样的函数调用在一个编译器和另一个编译器之间可能表现得非常不同:

void func (int, int);

int i = 2;
func (i++, i++);

不保证(在 C 或 C++ 标准语言定义中)增量将以任何特定顺序进行评估。任一增量都可能首先发生。func 可能会得到参数 '2, 3',或者它可能会得到 '3, 2',甚至是 '2, 2'。

https://gcc.gnu.org/onlinedocs/gcc/Non-bugs.html


推荐阅读