2014-10-17 17 views
-1

下面的程序在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; 
} 
+0

它还没有确定哪一个先被调用。在这种情况下,这与提示相同。 – BLUEPIXY 2014-10-17 08:59:46

+0

您是否打算更改函数中的全局变量a? – 2501 2014-10-17 09:18:02

+0

nah不完全我想弄清楚什么是函数调用的评估顺序,即t1()+ t2(),是评估的顺序undefined?如果有三个函数即t1()+ t2( )+ t3(),这种情况下的评估顺序是什么? – Sudeep 2014-10-17 09:25:26

回答

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); } 

在第一个版本on,它既是未指定的也是不相关的,哪个函数调用子表达式首先被评估。