編譯器對main函式做的事情

2021-08-20 07:03:44 字數 755 閱讀 5621

學習了底層之後,會有乙個疑問,為什麼我程式執行main函式就會自己去執行了?其實這個事情是編譯器幫你做的,編譯器幫你加了些許指令,下面就簡單介紹下

在tc 2.0的編譯器下,tc.exe檔案會把c0s.obj目標檔案和我們自己寫的.obj的目標檔案一起進行連線,生成.exe檔案,按照這樣的方法生成的.exe檔案中程式的執行過程如下所示

2、c0s.obj裡的程式呼叫main函式,這樣使用者程式就會從main函式開始執行了3、使用者程式從main函式返回到c0s.obj程式當中4、c0s.obj的程式接著執行,進行相關資源的釋放,環境恢復等工作5、c0s.obj的程式呼叫dos的int 21h例程的4ch號功能,程式返回

其實c程式必須從main函式開始執行是c語言的規定,但其實這個規定不是在編譯的時候保證的,也不是在連線的時候保證的,而是用下面的機制所保證的

c開發系統提供了使用者寫的應用程式正確執行所必須的初始化和程式返回等相關程式,這程式就放在相關的.obj檔案當中

之後就是需要將這些檔案和我們寫的.obj檔案進行一起連線,然後才可以生成可以正確執行的.exe檔案

還有就是在c語言開發系統提供的.obj檔案裡面的程式是要對main函式進行呼叫

C 編譯器的函式編譯流程

c 中的型別查詢過程相對簡單,基本上就是名字查詢,這裡不再介紹。對於 cpp 檔案中呼叫的乙個函式 或成員函式 編譯器主要做了下面三件事情 1 名字查詢 先在所在編譯單元中可見名字實體中進行名字查詢 1 類成員函式優先 物件所在的類 基類 一 經找到就停止查詢 2 如果沒有 在相應的名字空間中做進一...

C 編譯器的函式編譯流程

c 中的型別查詢過程相對簡單,基本上就是名字查詢,這裡不再介紹。對於 cpp 檔案中呼叫的乙個函式 成員函式 編譯器主要做了下面三件事情 1 名字查詢 先在所在編譯單元中可見名字實體中進行名字查詢 1 類成員函式優先 物件所在的類 基類 一經找到就停止查詢 如果沒有 2 在相應的名字空間中做進一步的...

編譯器對操作的重新排序

include include volatile int start 4 volatile int done 4 void work void param printf thread i started n id double total 0 for int i 0 i 100000000 i pr...