当前位置: C语言 -- 专题 -- main函数

main函数

C语言有两种可能的执行环境:独立环境(freestanding environment)和宿主环境(hosted environment)。独立环境中程序执行可能没有操作系统的支持;程序开始调用的第一个函数由C语言实现版本决定。宿主环境中程序启动时调用的函数称为main函数,也称主函数。实现不会声明main函数的函数原型。


main函数存在以下四种形式:

一、无参数、返回类型为int类型,具体形式如下所示:

1 
2 
3 
4 
int main(void)
{
    ...
}

二、有两个参数、返回类型为int类型,具体形式如下所示:

1 
2 
3 
4 
int main(int argc, char *argv[])
{
    ...
}

参数名不一定是argcargv,也可以是其它合法标识符。


main函数的上述参数应遵循以下规则:

1、参数argc应为非负值。

2argv[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、程序可以修改参数argcargv以及argv数组指向的字符串,并且在程序启动至终止期间保留最后一次存储值。


main函数的应用范例:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
/*函数main范例*/

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("argc = %d\n", argc);
    for(int i=0; i<argc; i++)
        printf("argv[%d]: %s\n", i, argv[i]);

    return 0;
}


三、上述两种形式的等价形式。

例如:函数的返回类型可以用与int类型兼容的typedef名替换;参数argv可以是char **argv等等。


四、实现定义的其它形式。


程序终止时,如果main函数的返回类型与int类型不兼容,程序返回给宿主环境的终止状态是不明确的;如果main函数的返回类型与int类型兼容,初始调用main函数的返回相当于以main函数的返回值作为参数调用exit函数;到达main函数的终止符号}时,返回0

main函数的返回值是返回给宿主环境。ISO/IEC 9899:2018标准为main函数提供了3个返回值:0EXIT_SUCCESSEXIT_FAILURE,其中EXIT_SUCCESSEXIT_FAILURE<stdlib.h>头文件中定义的宏。如果main函数的返回值为0或者EXIT_SUCCESS,表示程序成功终止;如果main函数的返回值为EXIT_FAILURE,表示程序未成功终止。具体实现中,还可能使用其它非0值表示main函数未成功终止,这些非0值的值和含义由具体实现定义。