操作数评估顺序

时间:2014-10-17 08:56:13

标签: c operator-precedence order-of-execution

C中以下程序的输出是什么?我基本上很困惑main()是先调用t1()还是t2()。

#include <stdio.h>

int a=40;
int t1()
{
    int a=20;
    return a;
}
int t2()
{
    int a=30;
    return a;
}
int main()
{
    int k=t1() + t2();
    printf("%d",k);
    return 0;
}

1 个答案:

答案 0 :(得分:4)

由于所有函数都返回局部变量的值,因此您的代码与此相同:

int a = 40;

int t1() { return 20; }
int t2() { return 30; }

int main() { printf("%d", t1() + t2()); }

或者,甚至更简单:

int a = 40;
int main() { printf("%d", 20 + 30); }

或更简单:

int a = 40;
int main() { fputs("50", stdout); }

在第一个版本中,首先评估哪个函数调用子表达式是未指定的和无关紧要的。