在c语言的标准规范中,main是程序唯一的主入口函数,操作系统加载编译后的可执行程序后,会首先跳转到main函数的起始位置开始执行代码,整个程序的逻辑流程都围绕main函数展开。

main函数的基本定义形式
main函数的定义需要符合c语言的语法规范,最基础的两种常见形式如下:
// 无参数、返回值为int类型的标准形式
int main(void) {
// 程序逻辑代码
return 0;
}
// 带命令行参数、返回值为int类型的标准形式
int main(int argc, char *argv[]) {
// 程序逻辑代码
return 0;
}
其中int是返回值类型,表示main函数执行结束后会给操作系统返回一个整数状态,void表示该函数不接受参数,第二种形式中的argc是命令行传入的参数个数,argv是存储各个参数的字符串数组。
main函数的核心作用
main函数的核心作用可以分为三个部分:
- 作为程序入口:操作系统启动程序后只会寻找main函数作为执行起点,没有main函数的c语言程序无法被正常编译为可执行文件。
- 承载核心逻辑:程序的主要功能实现代码都写在main函数的函数体中,或者由main函数调用其他自定义函数来完成。
- 返回执行状态:main函数的返回值会传递给操作系统,0通常表示程序正常执行结束,非0值表示程序执行过程中出现错误。
main函数的常见注意事项
返回值的要求
c语言标准规定main函数的返回值类型必须是int,虽然部分编译器允许将返回值写为void,但这属于编译器扩展的非标准写法,在跨编译器或者严格遵循标准的场景下会导致编译错误,因此建议始终使用int作为返回值类型。
参数传递的规则
如果程序需要从命令行接收参数,就需要使用带参数的main函数形式,比如执行程序时输入./test hello world,那么argc的值为3,argv[0]是程序名./test,argv[1]是hello,argv[2]是world。
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
for (i = 0; i < argc; i++) {
printf("第%d个参数是:%sn", i, argv[i]);
}
return 0;
}
函数体的执行逻辑
main函数的函数体中可以定义变量、调用标准库函数、调用自定义函数,也可以包含循环、判断等控制流语句,当执行到return语句或者函数体末尾时,main函数执行结束,程序也随之退出。
需要注意,在c99标准之后,如果main函数末尾没有写return 0,编译器会自动补全返回0的逻辑,但为了代码的可读性,建议显式写出返回值语句。