程式是從main主函式開始執行嗎?

2021-08-08 17:53:20 字數 1197 閱讀 5718

很多人開始學計算機語言,編寫**時都會有乙個疑問:程式真的是從main主函式開始的嗎?之前什麼都不做嗎?main結束後就不能執行其他函式了嗎?下面本篇文章就為此問題做乙個簡單的解釋。

作業系統在裝載程式之後,首先執行的不是main程式的第一行,在執行mian主函式之前其實還有一些別的**需要執行,這些**負責準備main主函式執行所需要的一些環境,並且負責呼叫main主函式,在main函式返回後,會記錄main函式的返回值,呼叫atexit()函式,然後結束程序。執行這些**的函式稱為入口函式或入口點,乙個程式的入口點實際上是乙個程式的初始化和結束部分,乙個典型的程式執行步驟大致如下:

1、作業系統在建立程序後,把控制權交給了程式的入口,這個入口就是執行庫中的某個入口函式。

2、入口函式對執行庫和程式執行環境作初始化,包括堆,執行緒全域性變數的構造。

3、入口函式在完成初始化之後,呼叫main()開始執行

4、main函式執行完成後返回到入口函式,然後入口函式進行清理工作,然後進行系統呼叫結束程序。

1、下面舉例乙個**:

#include

int a=3;

int main(int argc,char* argv)

例如上面那個程式,在main函式第一行執行之前全域性變數的初始化已經完成了,main函式引數也傳了進來

2、atexit函式也是在main函式返回後呼叫

atexit()註冊的函式型別應為不接受任何引數的void函式,exit呼叫這些註冊函式的順序與它們 登記時候的順序相反。同乙個函式如若登記多次,則也會被呼叫多次。如果乙個程序被訊號所中斷,那由atexit()函式註冊的終止處理程式不會被呼叫.

程式例:

#include

#include <

stdlib.h>

void exit_fn1(void)

void exit_fn2(void)

int main(void)

輸出:exit function #2 called

exit function #1 called

main主函式的引數:

int main(int argc  , char *argv,char* envp)

傳參個數

引數列表

環境變數

主函式預設接收乙個引數:就是所執行的命令,所傳引數以空格鍵區分,若要傳字串可以用雙引號和轉義字元連線

此部落格部分內容 

iOS 從main函式開始

然後就是main中的 autoreleasepool 首先說說uikit extern,ifdef cplusplus define uikit extern extern c attribute visibility default else define uikit extern extern ...

c 程式必須要從main函式開始執行麼?

這是在面試中被問到的乙個問題,回答了是。這問題第一感覺答案就是否定的,一時也沒想出來理由只能回答了是。當時太緊張了,其實回想一下組合語言就該想到程式的入口位址是可以指定的,c語言編譯器預設以main作為入口位址。網上查閱後,發現了 attribute 這個關鍵字,它可以設定函式屬性,變數屬性,型別屬...

剖析 為什麼c語言從main函式開始執行程式

今天學習c 突然想到為什麼程式要從main函式開始執行。也忘記老師有沒有講過,甚至有些遺忘。擔心之餘開始前往csdn進行查詢學習,終於在乙個大神部落格學習到了,現在分享給大家。main只是開發工具所規定的乙個特殊函式名稱而已。它既不是程式的入口,也不是必須要有的函式。程式的入口點記錄在可執行檔案中的...