C語言有兩種可能的執行環境
1. 獨立(freestanding)
在獨立環境中,C程式執行不需要作業系統的支援,因此只具有最小的連結庫能力。
2. 宿主(hosted)
在宿主的環境中,C程式會在作業系統的控制下執行,並且會使用作業系統所提供的支援,具有完整的標準連結庫能力。
為宿主環境而編譯的程式必須定義一個名為main的函式,這是程式開始時呼叫的第一個函式。
main 函式的定義有兩種形式:
int main(void){} // 沒有引數, 返回int.
int main(int argc, char *argv[]){} // 兩個引數,返回int .
另外許多C的實現還支援以下定義
int main(int argc, char *argv[], char *envp[]) //三個引數,一個int,兩個char **, 返回int.
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> /* 引數argc 和 argv 代表程式的命令列自變數 argc : argument count 值如果不是0,就是命令列中字串的數量,程式本身名字也算在內。 argv : argument vecto 一個char指標陣列,每個指標指向命令列中的字串。 envp : 環境指標; 是一個指標陣列,指向組成程式環境的字串。C中可用getenv()函式取得這些環境變數。 */ int main(int argc, char *argv[], char *envp[]) { printf("argument count is: %d %s \n", argc, argv[0]); for(int i=1; i<argc; i++) { printf("the %d argument is: %s \n", i, argv[i]); } for(int i=0; envp[i] != '\0'; i++) { printf("the env argument is: %s \n", envp[i]); } // get the env argument char *env = getenv("USER"); printf("%s \n", env); }
執行結果:
mac-abeen:asm_c abeen$ gcc arg.c
mac-abeen:asm_c abeen$ ./a.out
argument count is: 1 ./a.out
the env argument is: TERM_PROGRAM=Apple_Terminal
the env argument is: SHELL=/bin/bash
......
abeen