main函数
C语言有两种可能的执行环境:独立环境(freestanding environment)和宿主环境(hosted environment)。独立环境中程序执行可能没有操作系统的支持;程序开始调用的第一个函数由C语言实现版本决定。宿主环境中程序启动时调用的函数称为main函数,也称主函数。实现不会声明main函数的函数原型。
main函数存在以下四种形式:
一、无参数、返回类型为int类型,具体形式如下所示:
|
|
二、有两个参数、返回类型为int类型,具体形式如下所示:
|
|
参数名不一定是argc和argv,也可以是其它合法标识符。
main函数的上述参数应遵循以下规则:
1、参数argc应为非负值。
2、argv[argc]应为空指针。
3、如果参数argc大于0,数组成员argv[0]至argv[argc-1]应为指向字符串的指针,字符串的内容由程序启动前宿主环境(host environment)来定义,目的是在程序启动前从宿主环境的其它地方向程序提供信息。如果宿主环境不能提供大写的字符串和小写的字符串,实现应确保以小写形式接收字符串。
4、如果参数argc大于0,数组成员argv[0]指向的字符串应表示程序名;如果无法获取程序名,argv[0][0]应为空字符。如果参数argc大于1,数组成员argv[1]至argv[argc-1]指向的字符串应表示程序参数。
5、程序可以修改参数argc、argv以及argv数组指向的字符串,并且在程序启动至终止期间保留最后一次存储值。
main函数的应用范例:
|
|
三、上述两种形式的等价形式。
例如:函数的返回类型可以用与int类型兼容的typedef名替换;参数argv可以是char **argv等等。
四、实现定义的其它形式。
程序终止时,如果main函数的返回类型与int类型不兼容,程序返回给宿主环境的终止状态是不明确的;如果main函数的返回类型与int类型兼容,初始调用main函数的返回相当于以main函数的返回值作为参数调用exit函数;到达main函数的终止符号}时,返回0。
main函数的返回值是返回给宿主环境。ISO/IEC 9899:2018标准为main函数提供了3个返回值:0、EXIT_SUCCESS、EXIT_FAILURE,其中EXIT_SUCCESS、EXIT_FAILURE是<stdlib.h>头文件中定义的宏。如果main函数的返回值为0或者EXIT_SUCCESS,表示程序成功终止;如果main函数的返回值为EXIT_FAILURE,表示程序未成功终止。具体实现中,还可能使用其它非0值表示main函数未成功终止,这些非0值的值和含义由具体实现定义。