2012-06-26 00:12:57
| 分類:
linux|字型大小
訂閱 以前我們常用gcc main.c -o main
命令編譯乙個程式,其實也可以分三步做,第一步生成彙編**,第二步生成目標檔案,第三步生成可執行檔案:
$ gcc
-s main.c
$ gcc
-c main.s
$ gcc main
.o
由此可見,如果我們用gcc
做鏈結,gcc
其實是呼叫ld
將目標檔案crt1.o
和我們的hello.o
鏈結在一起。crt1.o
裡面已經提供了_start
入口點,我們的匯程式設計序中再實現乙個_start
就是多重定義了,鏈結器不知道該用哪個,只好報錯。另外,crt1.o
提供的_start
需要呼叫main
函式,而我們的匯程式設計序中沒有實現main
函式,所以報錯。
如果目標檔案是由c**編譯生成的,用gcc
做鏈結就沒錯了,整個程式的入口點是crt1.o
中提供的_start
,它首先做一些初始化工作(以下稱為啟動例程,startup routine
),然後呼叫c**中提供的main
函式。所以,以前我們說main
函式是程式的入口點其實不準確,_start
才是真正的入口點,而main
函式是被_start
呼叫的。
main
函式最標準的原型應該是int main(int argc, char *argv)
,也就是說啟動例程會傳兩個引數給main
函式,這兩個引數的含義我們學了指標以後再解釋。我們到目前為止都把main
函式的原型寫成int main(void)
,這也是c標準允許的,如果你認真分析了上一節的習題,你就應該知道,多傳了引數而不用是沒有問題的,少傳了引數卻用了則會出問題。
C語言main函式
c語言中main函式是可以帶引數的,平時寫倒是沒怎麼用這個引數,學習了一下這個引數。c語言規定了main函式只能有兩個引數,並且其型別也規定了,習慣上把他們寫成 main int argc char argv 第乙個引數是整形,第二個引數是指向字串的指標陣列,為什麼這麼定義?有什麼用?c語言還規定了...
C語言main 函式詳解
c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...
C語言main 函式詳解
c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...