C語言main函數必不可少,一起來了解C語言main函數

C語言標準在一開始(C90標準 5.1.2條),就規定了程序的執行環境。對於沒有操作系統的環境來說,C程序的入口函數是什麼都可以(也就是說的在單片機的C程序裡,或者在操作系統的底層代碼的C入口處,不需要是main函數)。

int main(void);

int main(int argc, char * argv[]);

對於 操作系統的執行環境的具體實現來說,鏈接器會把“你寫的C程序(以main開頭)”和另外的啟動程序相鏈接,而那些啟動程序裡面會引用你寫的main函數。這樣從程序員的視角來看,“C程序的入口”是main。

但是如果我們要指定我們的程序的入口為mymain 時,在linux下編譯直接出現undefined reference to `main'的錯誤

C語言main函數必不可少,一起來了解C語言main函數

C語言沒說C程序一定要有main()函數。c的編譯器工作之前先要做cpp(比如頭文件展開)一樣,編譯完了以後還要鏈接成可執行文件。鏈接的時候需要知道程序的入口是什麼。不管是什麼總歸得有的名字,所以main被選中了。你不喜歡這個名字,可以指定你自己的入口。

參見如下文檔的 -e 或者--entry參數。

main函數就是這個約定好的用戶代碼默認入口

gcc hello.c -e mymain -nostartfiles 編譯後發現我們的可執行文件a.out生成了,並且執行是,我們的hello linux也出現了

-e參數指定我們的程序的入口

-nostartfiles 連接的時候不使用標準系統的啟動文件

C語言main函數必不可少,一起來了解C語言main函數


分享到:


相關文章: