複製鏈接
請複製以下鏈接發送給好友

主程序

鎖定
主程序,也稱主函數,在許多命令式程序設計語言裏,主函數main function)是程序開始運行的地方。而相對地,其它編程範式的語言中就很少會有這樣一個概念。
中文名
主程序
外文名
main program
定    義
計算機基本的被獨立提供的程序
地    位
計算機程序的中心部分

主程序編程語言的相異性

主程序機器/彙編語言

在現代的計算機體系中,CPU 下一次要執行的指令地址由一個寄存器指出,稱為“指令指針”(Instruction Pointer、IP)或“程序計數器”(Program Counter、PC)。該寄存器在系統上電或復位時由硬件電路置為某地址值,位於該地址的程序即可視為整個程序的入口點。
這個概念一般只在嵌入式程序(固件)或操作系統的引導代碼中使用,因為給非嵌入式系統寫的程序通常包含數量龐大的機器指令、以至於關注一兩個機器指令是沒有意義的。

主程序可執行文件

所謂“可執行”,説白了就是這個文件存儲了一些信息、好創造某個讓程序可以開始運行的內存狀態,而操作系統裝載並創建進程的步驟就是把這個滿是機器指令的內存狀態復原出來並開始運行。因此,可執行文件中的“程序入口點”表示把加載進來的哪個地址當作“開始運行”的那一條指令。

主程序C/C++

C語言C++編程語言,main的函數原型如下所示:
int main(void)
int main()
int main(int argc, char *argv[])
main的兩個環境參數:argc(argument count)與argv(argument vector),兩者個別自程序的指令列給予參數的數量與參數數組的指針地址。argc與argv這兩個參數的名稱,在編程語言的命名規則底下,雖然可以依照用户的喜好自行定義,但是一般在使用上,還是會以現有的名稱argc與argv來進行程序的編寫。其他具有相依平台的格式也可以被C與C++標準所接受;例如,UNIX(非POSIX.1)與Microsoft Visual C++有第三個參數,是用來接收程序的環境變量,利用其他方法訪問環境變量,可以使用stdlib.h頭文件定義的getenv函數:
int main(int argc, char *argv[], char *envp[])
Mac OS X與Apple Darwin有第四個參數,它含有操作系統支持性的信息,很像是運行二進制文件的路徑:
int main(int argc, char *argv[], char *envp[], char *apple[])
由main傳給操作系統的傳回值,代表程序處理的結束狀態,在C的標準裏有定義兩個傳回值:EXIT_SUCCESS(通常是整數零0值)與EXIT_FAILURE。由於在實現上考量到各種的可能性,所以依照可能會發生的狀態來定義傳回值。
依照一般使用的規則,指令列參數的第一個元素就是代碼文件案的名稱,假如代碼文件案的名稱為rm.exe,當用户在指令列輸入rm file後,用户界面的程序shell會初始化rm.exe進程,設置環境變量argc = 2以及argv = ["rm", "file"]。
main這個名稱是一個特有的名稱;正常來説,用户在每個C與C++程序自定的函數名稱,必須不同於main這個名稱。
在C++裏,main一定是在全域的名稱空間內(例如:::main),它不可以是類別或是實體的成員函數。
由於前置處理器的關係,以下main函數源代碼可適用於Microsoft Visual C++Dev-C++ [1] 
#ifndef _MSC_VERint#elsevoid#endifmain(int argc, char** argv){    // 程式碼    system("PAUSE");    return#ifndef _MSC_VER    EXIT_SUCCESS#endif    ;}

主程序WinMain

微軟視窗為基礎的程序設計上,WinMain函數是視窗程序的進入點,函數原型如下所示:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

主程序.Net 語言(C#、VB 等)

C#編寫的程序,在開始運行時CLR會先去查找帶有.entrypointIL標示的靜態方法,而這個靜態方法可能沒有參數,或是隻有單一string[]類型的參數,而且還有void或是int類型的傳回值,找到後才會運行這個方法,而這個方法就是主函數。
static void Main();
static void Main(string[] args);
static int Main();
static int Main(string[] args);

指令列參數會被引入到args變量內,引入的方式與Java相類似。但是,針對有整數傳回值的Main而言,引入的方式類似C/C++,而指令列參數會被當成進程的結束狀態,傳回給操作系統或是運行它的外部環境。
同為 .net 語言的Visual Basic .NET大體也是一樣。不過不同的是,舊版本Visual Basic的程序可以選擇在執行默認初始化步驟後以一個窗體啓動,此時的主函數是不可見的;新版本為了兼容性和簡化編碼工作而保留了這個特性。

主程序Java

Java編程語言是以main方法來當做程序開始的起點,方法如下:
public static void main(String[] args)
命令行指定參數是args。如同C和C++一樣,“main”也是唯一的。Java的main方法無任何的傳回值。

主程序Pascal

Pascal的主要程序是不需命名的。因為Pascal程序的程序和函數在編寫程序上比C、C++或是Java更加嚴格,在程序裏主要程序通常才是最後的程序。Pascal沒有main或是其他相類似的關鍵字。
以下是Hello world示例:
procedure hello() begin  writeln('Hello world')end;begin  hello() end.

主程序Pike

Pike與C/C++的語法相類似。從main開始運行。“argc”代表環境參數的個數。“argv”代表環境參數的值。
舉例如下: [2] 
int main(int argc, array(string) argv)
參考資料
  • 1.    "The Haskell 98 Report: Modules". Haskell.org. Retrieved 2013-08-19.
  • 2.    XL FORTRAN for AIX. Language Reference. Third Edition, 1994. IBM