[ASM C/C++] C語言的main 函式

ABeen發表於2015-01-26

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 


 

 

 

相關文章