在這裏我的程序正在運行,它給出的輸出是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
在這裏我的程序正在運行,它給出的輸出是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
在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更新。
您能否注意到您在程序中使用的兩個功能。
int main()
int add()
都返回類型爲int
(整數)。但你從add()返回(a+b)
,但不返回main()中的任何東西。
嘗試return 0
在main()函數的末尾。
在從主函數返回時,您可以選擇多個選項。這將幫助您向C運行時傳遞關於程序如何執行的信息。例如,return 0
用於正常執行,而return 1
用於錯誤。
在主函數中將main()的返回類型更改爲「void」,或者將「return 0;」放回去。您指定了返回類型爲int的主函數,但該函數不返回任何內容,因此發生錯誤並顯示輸出,因爲int add(int,int)正確返回(a + b)。
'main'應該真的返回'int'。 – juanchopanza 2014-09-28 10:02:17
@juanchopanza沒有必要。你可以指定返回類型的main來在C中作廢。我之前做過。 – Vivek 2014-09-28 10:06:02
託管環境中需要它,即具有操作系統的東西。它在C標準。 – juanchopanza 2014-09-28 10:08:52
因此,報告的「運行時錯誤」只是shell對(undefined)返回值的解釋? – usr2564301 2014-09-28 09:25:18
自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
@mafso感謝您的信息。所以C99在這方面就像C++一樣,在C89中行爲不是未定義的,但返回的狀態是(可能它是一個有效但不確定的值)。 – juanchopanza 2014-09-28 09:34:16