大家都知道,main函数是程序的入口,但是main函数有哪些细节呢?程序是怎么结束又有哪哪些细节呢?今天就来查查资料梳理一下。
一、程序启动
根据C99标准程序启动的时候会调用被命名为main的函数,main函数不需要原型。常用的两种形式如下:
- int main(void) { /* ... */ }
- int main(int argc, char *argv[]) { /* ... */ }
这两种形式是等价的,第2种经常用来接受命令行参数。
根据C99标准说,也可以有其他实现定义的方式,不一定非要通过main函数。不过这种情况比较少见,正常是用不到的。
二、程序结束
1、调用库函数exit(int status)终止
这时会向exit函数传入一个退出状态status,一般是EXIT_SUCCESS和EXIT_FAILURE;
2、直接执行到main函数尾部,有return的情况
这种情况等同于执行对exit(status)的调用,return的值传给exit中的status参数
3、直接执行到main函数尾部,无return的情况
查了一些资料说同样会导致main函数的调用者执行exit函数,不过不同C标准和编译器会传入不同的status状态。C89标准未就这种情况进行说明,程序可以返回任意的status值。C99标准要求执行到main函数结尾处的情况等同于调用exit(0)。
4、异常终止
通常是接收一个信号引发,该信号默认动作是终止当前进程。
三、总结
程序启动时会调用名叫main的函数,main函数可以带参数,也可以不带参数,带参数的一般用于命令行参数。程序结束分正常结束和异常结束。正常结束一般是通过exit(status)结束的。异常结束一般是信号引发的。