无法理解C progaram的输出

Gau*_*don -1 c output

我的代码是:

#include<stdio.h>
int main()
{
    char c='8';
    int d=8;
    printf("%d %d %d",d,d+=c>='0'&&c<='9',c++);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

这个问题的结果是:9 9 56.我无法理解这一点.请有人帮助我,请解释我的输出.谢谢.

Ser*_* L. 5

您正在观察未定义的行为.d作为参数传递两次,一次传递副作用.如果按顺序完成,您的代码应该等效于

char c='8';
int d=8;
printf("%d",d);

d+= (c>='0)' && (c<='9');
printf(" %d", d);
printf(" %d",c);
c++;
Run Code Online (Sandbox Code Playgroud)

但是,因为在将副作用传递给您在此处看到的函数时,参数的计算顺序是未定义的:

char c='8';
int d=8;

d+= (c>='0)' && (c<='9');
printf("%d",d);
printf(" %d", d);
printf(" %d",c);
c++;
Run Code Online (Sandbox Code Playgroud)

  • @Gaminic未定义参数评估的顺序 (2认同)