[英]Hello world program gives an error on void in main
我在 Ubuntu 中使用 Emacs 輸入了以下代碼並使用命令行編譯
#include <stdio.h>
int main(void)
{
printf("Hello World!\n\n");
return 0;
}
在 main 函數參數中有 void 返回以下警告
helloworld.c: In function ‘main’: helloworld.c:6:1: warning: control reaches end of non-void function [-Wreturn-type] } ^
當我刪除括號內的“void”時,程序編譯沒有任何錯誤。 在這個程序中有main(void)
有什么不正確?
編譯命令是gcc -Wall -ggdb helloworld.c -o hello
該錯誤與main()
的簽名中的void
沒有任何關系int main(void)
是正確的,並且是在不需要處理命令行參數時定義main()
的方法。
該錯誤意味着您定義了int main(void)
並且您沒有從函數返回值。 像這樣
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
}
在較新版本的gcc 中為main()
刪除了此警告,因為main()
在程序退出時隱式返回0
,除非您用exit()
或main()
的顯式返回另有指示。
普通函數仍會觸發此警告,它有助於防止由於未從函數返回並嘗試捕獲返回值而導致的未定義行為。
警告可能是針對main()
函數的唯一方法是如果您沒有 return 語句並且您正在 C89/C90 模式下編譯。
從 C99 開始,不需要在main()
末尾的 return 語句,它會被假定為return 0;
如果控制從main()
的末尾返回。 所以在 c99 或 C11 模式下編譯:
gcc -Wall -ggdb -std=c11 helloworld.c -o hello
這不會觸發該警告。 或者,如果您在 c89/C90 中編譯,請確保您有return
語句。 直到最近(至少到 gcc 4.9),gcc 中的默認模式是gnu90
。 因此,如果您不通過std=
您將在沒有 return 語句的情況下收到該警告。
我想你實際上沒有return 0;
在產生此警告的實際代碼中,因為如果您有明確的return
語句,那么在什么 C 模式下編譯它都無關緊要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.