[ASM C/C+]C言語のmain関数

3570 ワード

C言語には2つの可能な実行環境がある
1.独立(freestanding)
独立した環境では、Cプログラム実行はオペレーティングシステムのサポートを必要としないため、リンクライブラリの能力は最小限に抑えられます.
2.宿主(hosted)
ホストの環境では、Cプログラムはオペレーティングシステムの制御の下で実行され、オペレーティングシステムが提供するサポートを使用して、完全な標準リンクライブラリ能力を持っています.
ホスト環境のためにコンパイルされたプログラムは、プログラムの開始時に呼び出される最初の関数であるmainという関数を定義する必要があります.
main関数の定義には2つの形式があります.
int main(void){}//パラメータがなく、intを返します.
int main(int argc,char*argv[])/2つのパラメータはintを返します.
さらに多くのCの実装では、以下の定義もサポートされています.
int main(int argc,char*argv[],char*envp[])/3つのパラメータ、1つのint、2つの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 
", argc, argv[0]); for(int i=1; i<argc; i++) { printf("the %d argument is: %s
", i, argv[i]); } for(int i=0; envp[i] != '\0'; i++) { printf("the env argument is: %s
", envp[i]); } // get the env argument char *env = getenv("USER"); printf("%s
", 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