2014-09-28 127 views
-2

在這裏我的程序正在運行,它給出的輸出是93,但它產生運行時錯誤,我不明白爲什麼它是?c - 爲什麼它給出運行時錯誤,但它給出輸出

#include<stdio.h> 
int add(int ,int); 
int main() 
{ 

printf("addition is=%d \n",add(91,2)); 
} 
int add(int a,int b) 
{ 
return (a+b); 
} 

輸出 運行時錯誤 除了是= 93

回答

4

在C89,您需要從main返回int。例如,

int main(void) 
{ 
printf("addition is=%d \n",add(91,2)); 
return 0; 
} 

0返回值表示成功。用gcc 4.9編譯在C89模式代碼將產生以下警告:

警告:控制到達非void函數的端[-Wreturn型]

在C99或C11,一個異常用於main函數,在沒有返回語句的情況下存在隱式return 0。所以你的代碼在標準上比C89更新。

+1

因此,報告的「運行時錯誤」只是shell對(undefined)返回值的解釋? – usr2564301 2014-09-28 09:25:18

+2

自C99以來,'main'是一個例外(最後有一個隱式的'return 0;'),見5.1.2.2.3; [此C89草案](http://flash-gordon.me.uk/ansi.c.txt)讀取(2.1.2.2「程序終止」)_如果主函數執行指定無值的返回,則返回終止狀態到主機環境是undefined._ – mafso 2014-09-28 09:31:59

+1

@mafso感謝您的信息。所以C99在這方面就像C++一樣,在C89中行爲不是未定義的,但返回的狀態是(可能它是一個有效但不確定的值)。 – juanchopanza 2014-09-28 09:34:16

1

您能否注意到您在程序中使用的兩個功能。

int main() 
int add() 

都返回類型爲int(整數)。但你從add()返回(a+b),但不返回main()中的任何東西。

嘗試return 0在main()函數的末尾。

在從主函數返回時,您可以選擇多個選項。這將幫助您向C運行時傳遞關於程序如何執行的信息。例如,return 0用於正常執行,而return 1用於錯誤。

0

在主函數中將main()的返回類型更改爲「void」,或者將「return 0;」放回去。您指定了返回類型爲int的主函數,但該函數不返回任何內容,因此發生錯誤並顯示輸出,因爲int add(int,int)正確返回(a + b)。

+0

'main'應該真的返回'int'。 – juanchopanza 2014-09-28 10:02:17

+0

@juanchopanza沒有必要。你可以指定返回類型的main來在C中作廢。我之前做過。 – Vivek 2014-09-28 10:06:02

+0

託管環境中需要它,即具有操作系統的東西。它在C標準。 – juanchopanza 2014-09-28 10:08:52

相關問題