主函式

维基百科,自由的百科全书
跳转至: 导航搜索

在一些程式設計語言裡,主函式main function)是程式開始執行的地方。

程式語言的相異性[编辑]

C/C++[编辑]

C語言C++程式語言,main 的函式原型如下所示:

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

main 的兩個環境參數:argcargument count)與 argvargument vector[1],兩者個別自程式的指令列給予參數的數量與參數陣列的指標位址。argcargv 這兩個參數的名稱,在程式語言的命名規則底下,雖然可以依照使用者的喜好自行定義,但是一般在使用上,還是會以現有的名稱 argcargv 來進行程式的編寫。其他具有相依平台的格式也可以被 C 與 C++ 標準所接受;例如,UNIX(非POSIX.1)與 Microsoft Visual C++ 有第三個參數,是用來接收程式的環境變數,利用其他方法存取環境變數,可以使用 stdlib.h 標頭檔案定義的 getenv 函式:

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

Mac OS XApple Darwin 有第四個參數,它含有作業系統支援性的資訊,很像是執行二進制檔案的路徑:[2]

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++

#ifndef _MSC_VER
int
#else
void
#endif
main(int argc, char** argv)
{
    // 程式碼
    system("PAUSE");
    return
#ifndef _MSC_VER
    EXIT_SUCCESS
#endif
    ;
}

WinMain[编辑]

這是一段 WinMain 的程式碼。

微軟視窗為基礎的程式設計上,WinMain[3] 函式是視窗程式的進入點,函式原型如下所示:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

C#[编辑]

C#編寫的程式,它在執行時期,CLR會先去尋找帶有 .entrypoint IL 標示的靜態方法,而這個靜態方法可能沒有參數,或是只有單一 string[] 型態的參數,而且還有 void 或是 int 型態的傳回值,找到後才會執行這個方法,而這個方法就是主函式。[4]

static void Main();
static void Main(string[] args);
static int Main();
static int Main(string[] args);

指令列參數會被引入到 args 變數內,引入的方式與 Java 相類似。但是,針對有整數傳回值的 Main 而言,引入的方式類似 C/C++,而指令列參數會被當成處理程序的結束狀態,傳回給作業系統或是執行它的外部環境。

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」代表環境參數的值。

舉例如下:

int main(int argc, array(string) argv)

參考資料[编辑]

  1. ^ argv: the vector term in this variable's name is used in traditional sense to refer to strings.(基本上這個參數是以傳統的方法對參數的字串進行存取的動作,相當於指標陣列)
  2. ^ The char *apple Argument Vector
  3. ^ http://msdn.microsoft.com/en-us/library/ms633559%28VS.85%29.aspx
  4. ^ http://msdn.microsoft.com/msdnmag/issues/04/02/NETConsoleApps/

外部連結[编辑]