printf参数中评估和赋值运算符的优先级

时间:2015-05-25 03:33:33

标签: c printf

#include<stdio.h>
int main()
{
    int k=35;
    int a=k==35;
    printf("%d %dn", k==35, k=50);
    printf("%d %dn", a,k=50);
    return 0;
}

在第一个printf语句中,为什么k==35评估为0?我认为这可能是因为k=50赋值发生在k==35评估之前。但是,我不明白为什么不按顺序评估printf参数?

2 个答案:

答案 0 :(得分:3)

printf("%d %dn", k==35, k=50);

未指定首先评估k=50k==35,因此此代码具有未定义的行为。

答案 1 :(得分:1)

printf()中的评估顺序未定义,因此导致未定义的行为。