C語言中文網 目錄

C語言main()函數

C 語言有兩種可能的運行環境中,它們之間有一定差別:

(1) 獨立環境(freestanding)
     在獨立環境中,C 程序的運行沒有操作系統的支持,因此,只具有最小部分的標準庫能力。

(2) 宿主環境(hosted)
     在宿主環境中,C 程序會在操作系統的控制和支持下運行。可得到完整的標準庫能力。

在獨立環境中,程序開始時所調用的第一個函數,其類型和名稱是由正在運行的 C 語言實現版本所決定的。除非是在嵌入式系統上進行 C 程序開發,否則程序一般都運行在宿主環境中。

在宿主環境中編譯的 C 程序必須定義一個名為 main 的函數,這是程序開始時調用的第一個函數。main()函數的定義有以下兩種形式:
(1) 函數沒有參數,返回值為 int 類型。

int main( void ) { /* … */ }

(2) 函數有兩個參數,類型分別是 int 和 char**,返回值是 int 類型。

int main( int argc, char *argv[ ] ) { /* … */ }

這兩種定義方式都符合 C 語言標準。除此之外,許多 C 的實現版本還支持第三種、非標準語法的定義方式:

int main( int argc, char *argv[ ], char *envp[ ] ) { /* … */ }


函數返回值是 int,有 3 個參數:第一個是 int,另外兩個是 char**。

在上面所有的例子中,main()函數都會把最終的執行狀態以整數的方式傳遞給操作系統。返回值如果是 0 或 EXIT_SUCCESS,就表示程序執行過程一切順利;任何非 0 的返回值,尤其是 EXIT_FAILURE,則表示程序執行時出現了某種問題。

頭文件 stdlib.h 中定義了上述的兩個常量 EXIT_SUCCESS 和 EXIT_FAILURE。main()函數不一定要有 return 語句。如果程序運行到 main()函數塊的右括號(}),那么就會自動向執行環境返回狀態值 0。

main()函數結束等效于調用標準庫函數 exit(),main()的返回值作為 exit()的參數。

參數 argc 和 argv(也可以根據需要另外命名),代表了程序的命令行參數。它們的作用如下:

(1) argc(全稱為 argument count)的值為 0 或者為命令行中啟動該程序的字符串的數量。程序本身的名稱也算作該字符串,也要計算進去。

(2) argv(全稱為 arguments vector)是一個 char 指針數組,每個指針都獨立的指向命令行中每個字符串:
   數組中元素的個數,比 argc 的值多 1;最后一個元素 argv[argc] 是空指針。
   如果 argc 大于 0,那么第一個字符串,argv[0],就是程序本身的名稱。如果運行環境不支持程序名稱,那么 argv[0] 為空。
   如果 argc 大于 1,從字符串 argv[1] 到 argv[argc-1] 包含該程序命令行參數。

(3) envp(全稱為 environment pointer)在非標準的、有 3 個參數的 main()函數版本中,是一個指針數組,每個指針都指向組成程序環境的一個字符串。通常,這個字符串的格式是“名稱=值”。在標準 C 語言中,可以利用函數 getenv()獲取得這些環境變量。

例 1 是一個簡單的程序,它輸出自己的名稱以及從操作系統傳入的命令行參數。

【例1】命令行
#include <stdio.h>
int main( int argc, char *argv[ ] )
{
  if ( argc == 0 )
    puts( "No command line available." );
  else
  {                                            // 輸出程序的名稱
     printf( "The program now running: %s\n", argv[0] );
     if ( argc == 1 )
       puts( "No arguments received on the command line." );
     else
     {
       puts( "The command-line arguments:" );
       for ( int i = 1; i < argc; ++i )      // 將每個參數輸出到不同行
         puts( argv[i] );
      }
   }
}

假設我們在 Unix 系統上執行程序,輸入下面的命令行:

$ ./args one two "and three"

輸出結果如下:

The program now running: ./args
The command-line arguments:
one
two
and three

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo