首页 > 代码库 > [ASM C/C++] C语言的 main 函数
[ASM C/C++] C语言的 main 函数
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.
参数argc 和 argv 代表程序的命令行自变量
argc : argument count 值如果不是0,就是命令行中字符串的数量,程序本身名字也算在内。
argv : argument vecto 一个char指针数组,每个指针指向命令行中的字符串。
envp : 环境指针; 是一个指针数组,指向组成程序环境的字符串。C中可用getenv()函数取得这些环境变量。
#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
[ASM C/C++] C语言的 main 函数