[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を返します.
mac-abeen:asm_c abeen$ gcc arg.c
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