main函式返回整型值原因

2021-05-10 19:59:23 字數 961 閱讀 4244

**自:http://www.eefocus.com/article/09-10/85481s.html (linux c程式設計一站式學習 )

main函式最標準的原型應該是int main(int argc, char *argv),也就是說啟動例程會傳兩個引數給main函式,這兩個引數的含義我們學了指標以後再解釋。我們到目前為止都把main函式的原型寫成 int main(void),這也是c標準允許的,如果你認真分析了上一節的習題,你就應該知道,多傳了引數而不用是沒有問題的,少傳了引數卻用了則會出問題。

由於main函式是被啟動例程呼叫的,所以從main函式return時仍返回到啟動例程中,main函式的返回值被啟動例程得到,如果將啟動例程表示成等價的c**(實際上啟動例程一般是直接用彙編寫的),則它呼叫main函式的形式是:

也就是說,啟動例程得到main函式的返回值後,會立刻用它做引數呼叫exit函式。exit也是libc中的函式,它首先做一些清理工作,然後調 用上一章講過的_exit系統呼叫終止程序,main函式的返回值最終被傳給_exit系統呼叫,成為程序的退出狀態。我們也可以在main函式中直接調 用exit函式終止程序而不返回到啟動例程,例如:

這樣和int main(void) 的效果是一樣的。在shell中執行這個程式並檢視它的退出狀態:

按照慣例,退出狀態為0表示程式執行成功,退出狀態非0表示出錯。注意,退出狀態只有8位,而且被shell解釋成無符號數,如果將上面的**改為exit(-1);或return -1;,則執行結果為

注意,如果宣告乙個函式的返回值型別是int,函式中每個分支控制流程必須寫return語句指定返回值,如果缺了return則返回值不確定(想想這是 為什麼),編譯器通常是會報警告的,但如果某個分支控制流程呼叫了exit或_exit而不寫return,編譯器是允許的,因為它都沒有機會返回了,指 不指定返回值也就無所謂了。使用exit函式需要包含標頭檔案stdlib.h,而使用_exit函式需要包含標頭檔案unistd.h,以後還要詳細解釋這 兩個函式。

main函式的返回值

最近在面試過程中,面試官都會問些c語言容易忽視的地方,如main函式返回值的作用等。這些細節還是得學習下,雖然在實踐工作中的使用會較少。程式執行過程入口點main函式,main 函式返回值型別必須是int,這樣返回值才能傳遞給程式啟用者 如作業系統 表示程式正常退出。main int args,ch...

檢視main函式的返回值

1 printf args 等價於 fprintf stdout,args 2 main 函式的返回值是乙個狀態指示器,返回值是0表示main 函式成功執行完畢 3 訪問main 函式的返回值的方式和系統有關,不論是unix還是windows系統,執行程式後,必須發出乙個適當的echo命令。unix...

C 之main 函式的返回值

一般我們的程式main 函式都返回0,表示程式執行成功。但程式執行失敗的時候,我們應該返回什麼?不同的機器會定義不同的數字表示程式執行失敗,而一般都是定義0為程式執行成功。這裡介紹cstdlib 中定義的兩個預處理變數,分別表示程式執行成功和失敗 include int main if some f...