入口點
佇咧電腦編程當中,入口點是佇咧程式中執行頭一條指令的所在,和程式存取命令列參數的所在。欲開始一个程式的執行,裝載器抑是作業系統會將控制權傳達到伊的入口點。(咧引𤆬期間,作業系統家己就是這个程式)。 這標誌著從裝載時(佮動態連接的時陣,如果存在來講)到執行的時陣的轉變。
對某一寡作業系統佮程式語言,入口點是執行時庫,伊是一組對語言的支援函式。庫代碼初初的化程式並且欲來共控制權傳達予程式本身。佇其他的情形下,程式家己會當初初化執行的時庫。佇簡單的系統內底,執行開始佇第一條語句,這種見面直譯語言,簡單的好執行格式,佮引導裝載器中。佇其他的情形下,入口點是佇咧某一个其他已知影記持體位址,這會當是絕對位址抑是相對位址(偏徙量)。
會當做替代選擇,程式的執行會當開始於號名點,欲按怎是程式語言抑是作業系統定義的約定名,愛啥物是呼叫者指定的名。佇咧足濟 C 家族語言內底,這是叫做 ` main ` 的函式;做結果,入口點不時號做主函式。佇咧 JVM 語言譬如講 Java 中,入口點是講號做 ` main ` 的靜態方法;佇咧 CLI 語言譬如講 C # 中,入口點是講號做 ` Main ` 的靜態方法。
用法
佇現代的電腦體系內底,CPU 後一擺欲執行的指令位址由一个暫存器指出,這號做「指令指標」(Instruction Pointer、IP)抑是「程式計數器」(Program Counter、PC)。 該暫存器佇咧系統上電或者是復位的時陣由硬體電路置為啥物所在值,佇這个地址的程式就會當看做是規个程式的入口點。這个概念一般干焦佇1875入式的程式(韌體)或者是作業系統的引導代碼內底使用,因為去予斷去入式系統寫的程式通常包含數量傷過大的機器指令、往過關注一兩个機器是講無意義的。
啊若所謂的「可執行」,講白的就是講這个檔案儉一寡資訊、好創造某一个予程式會當開始執行的記持體狀態,若做業系統裝載並建立行程的流程就是共這个滿是機器指令的記憶體狀態復原出來並開始執行。所以,會當執行檔中的「程式入口點」表示共載入來的佗一个位址當做「開始執行」彼條指令著。
程式語言
C / C + +
佇咧 C 語言抑是 C + + 程式語言,` main ` 的函式原型如下所示:
` main ` 的兩个環境參數:` argc `(_ argument count _)佮 ` argv `(_ argument vector _), 兩个人對程式的指令列予參數的數量佮參數陣列的指標位址。` argc ` 佮 ` argv ` 這兩个參數的名稱,佇咧程式語言的號名規則下底,雖然會當照使用者會當佮意家己的定義,但是一般咧使用,抑是會使現有的名稱 ` argc ` 佮 ` argv ` 來做程式的編寫。其他的物件有相依平台的格式嘛會當予 C 佮 C + + 標準所接受;比如講,UNIX(非 POSIX . 一)佮 Microsoft Visual C + + 有第三个參數,是用來接收程式的環境變數,利用其他的方法存取環境變數,會用得使用 ` stdlib . h ` 標頭檔案定義的 ` getenv ` 函式:
Mac OS X 佮 Apple Darwin 有第四个參數,伊有含做業系統支援性的資訊,譬如講執行二進制檔案的路徑:
由 ` main ` 傳予作業系統的傳回值,代表程式處理的結束狀態,佇咧 C 的標準內底有定義兩个傳回值:` EXIT _ SUCCESS `(通常是整數零 _ 零 _ 值)佮 ` EXIT _ FAILURE `。因為佇實作上考慮著各種的可能性,所以按照可能會發生的狀態來定義傳回值。
依照一般使用的規則,指令列參數的頭一个元素就是程式檔案的名稱,若準程式檔案的名稱做 ` rm . exe `,做使用者咧指令列輸入 ` rm file ` 後,使用者介面的程式 shell 會初初化 ` rm . exe ` 處理程式,設定環境變數 ` argc=二 ` 以及 ` argv=[" rm " , " file "] `。
` main ` 這个名是一个特有的名;正常來講,使用者佇每一个 C 佮 C + + 程式自訂的函式名稱,著愛無仝款 ` main ` 這个名。
佇咧 C + + 內底,` main ` 一定是佇咧全域的名稱空間內底(比如講:` : : main `), 伊袂當是類別抑是實體的成員函式。
因為頭前處理器的關係,以下 ` main ` 函式原始碼會當用 Microsoft Visual C + + 佮 Dev-C + +:
WinMain
以微軟視窗為基礎的程式設計上,` WinMain ` 函式是視窗程式的進入點,函式的原型如下所示:
. Net 語言(C #、VB 等)
以 C # 編寫的程式,咧開始執行的時陣 CLR 會先去走揣帶有 ` . entrypoint ` IL 標示的靜態方法,這个靜態方法可能無參數,抑是講干焦單一 ` string [ ] ` 型態的參數,而且閣有 ` void ` 抑是講 ` int ` 型態的傳回值,揣到落尾才會執行這个方法,啊若這个方法就是主函式。
指令列參數會去予人引入到 ` args ` 變數內底,引入的方式佮 Java 相類似。猶毋過,針對有整數傳回值的 ` Main ` 來講,引入的方式類似 C / C + +,指令列參數會予人當做處理程式的結束狀態,傳轉予作業系統抑是執行伊的外部環境。
仝為 . net 語言的 Visual Basic . NET 大體嘛是仝款。猶毋過無仝的是,舊版本 Visual Basic 的程式會當選擇佇執行預設初始化部份了後以一个表單啟動,現此時的主函式是不可見的;新版本為著相容性佮簡化編碼做工課咧保留這件代誌。
Java
Java 程式語言是以 main 方法來當做程式開始的起點,方法假下:
命令列指定參數是 _ args _。如同 C 和 C + + 仝款,「 main」嘛是唯一的。Java 的 main 方法無任何的傳回值。
Pascal
Pascal 的主要程式是毋免號名的。因為乎 Pascal 程式的程式佮函式咧編寫程式咧比 C、C + + 抑是講 Java 閣較嚴格,佇咧程式內底主要程式通常才是上尾的程式。Pascal 無咧 main 抑是其他相類似的關鍵字。
以下是 Hello world 範例:
Pike
Pike 佮 C / C + + 的語法相類似。對 main 開始執行。「argc」代表環境參數的個數。「argv」代表環境參數的值。
比如講下跤:
參見
- crt 零,連接著 C 程式上的一組執行啟動定式。
- 執行的時系統
參考資料
外部連結
- Python main ( ) 函式