main 是C程序的入口点和起点。

(图片来源网络,侵删)
当你运行一个C程序时,操作系统会找到并执行这个程序里的 main 函数,程序中所有的其他代码,要么是在 main 函数内部直接执行的,要么是由 main 函数调用的,可以把 main 函数想象成一个房子的大门,你必须通过大门才能进入房子(程序)开始活动。
详细解释
为什么叫 main?
main 是英文 "main function" 的缩写,意思就是“主函数”,它之所以叫“主”,是因为它是整个程序的核心和控制器,程序的执行流程从这里开始,也在这里结束(除非中途有其他函数调用 exit() 等特殊情况)。
main 函数的定义
main 函数有几个标准的定义形式,最常见的是以下两种:
没有参数,也没有返回值

(图片来源网络,侵删)
#include <stdio.h>
int main(void) {
// 程序的主要逻辑写在这里
printf("Hello, World!\n");
return 0; // 虽然返回类型是int,但这里返回0表示成功
}
int main(void):int: 表示main函数执行完毕后会返回一个整数值给操作系统,这个值被称为“退出状态码”或“返回码”。0表示程序成功执行,非零值(如1,-1等)表示程序执行时遇到了错误。main: 函数名,固定不变。(void): 表示main函数不接受任何参数。
带有参数,可以接收命令行输入
#include <stdio.h>
int main(int argc, char *argv[]) {
// argc: argument count (参数个数)
// argv: argument vector (参数向量,即参数数组)
printf("程序名称: %s\n", argv[0]);
printf("参数个数: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("参数 %d: %s\n", i, argv[i]);
}
return 0;
}
int main(int argc, char *argv[]):argc(argument count): 一个整数,代表程序启动时在命令行传入的参数的总数。注意:这个总数包括程序本身的名称。argv(argument vector): 一个字符指针数组(字符串数组),它存储了所有传入的参数。argv[0]通常是程序的路径或名称,argv[1]到argv[argc-1]是用户实际输入的参数。
例如,如果你编译上面的代码得到一个名为 my_program 的可执行文件,然后在终端运行:
./my_program apple banana 123
那么程序内部的值将是:
argc的值是4(分别是./my_program,apple,banana,123)。argv[0]指向字符串"./my_program"argv[1]指向字符串"apple"argv[2]指向字符串"banana"argv[3]指向字符串"123"
main 函数的关键特性
- 唯一性:一个标准的C程序必须有且仅有一个
main函数,如果定义多个,编译器会报错(“multiple definition of 'main'”)。 - 入口点:它是操作系统启动你的程序时,第一个调用的函数,你写的其他函数(比如你自定义的
add()函数)只有在被main或其他函数调用时才会执行。 - 返回值:
main函数的返回类型通常是int,返回0是一种约定俗成的做法,表示程序成功执行,如果程序因为某些错误而终止,可以返回一个非零值,这样其他脚本或程序可以通过检查这个返回值来判断程序是否成功。
return 0; 的作用
return 0; 语句有两个作用:

(图片来源网络,侵删)
- 函数内部:它立即终止
main函数的执行。 - 函数外部:它将整数值
0返回给操作系统,告诉操作系统:“我的任务已经成功完成。”
在很多现代的C编译器(如GCC)中,如果你省略 return 0;,main 函数正常执行到结尾,编译器会自动为你加上 return 0;,为了代码的清晰和可移植性,强烈建议在 main 函数中显式地写上 return 0;。
| 特性 | 描述 |
|---|---|
| 名称 | main |
| 角色 | C程序的入口点和起点 |
| 数量 | 一个程序中只能有一个 |
| 返回类型 | 通常是 int,用于向操作系统报告程序执行状态(0=成功,非0=失败) |
| 参数 | 可以没有 (void),也可以有 (int argc, char *argv[]) 来接收命令行参数 |
| 重要性 | 没有 main 函数,C程序就无法被操作系统执行 |
当你写C程序时,main 就是你开始构建整个逻辑大厦的地方。
