2014-10-17 65 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,它既是未指定的也是不相關的,哪個函數調用子表達式首先被評估。