int main() 是什么?
int main() 是 C 程序的入口函数,当你运行一个 C 程序时,操作系统会自动找到并执行 main 函数中的第一条语句,程序执行完毕后,操作系统会接收 main 函数的返回值,并根据这个返回值判断程序是否成功执行。

我们可以把它分解成三个部分来理解:int、main 和 。
各个部分的详解
a. main - 函数名
main 是一个特殊的函数名,它是 C 标准规定的程序启动点,一个标准的 C 程序必须有且仅有一个 main 函数,操作系统会首先调用这个函数,你的所有其他代码逻辑都直接或间接地从这里开始执行。
b. - 函数参数
括号表示 main 是一个函数,括号内可以包含参数,这些参数用于接收程序启动时由用户或操作系统传入的信息。
最常见的两种形式是:

-
无参数形式:
int main()- 这表示
main函数不接受任何参数。 - 适用于那些不需要从命令行获取输入数据的简单程序。
- 这表示
-
*带参数形式:`int main(int argc, char argv[])`**
- 这是最完整的、也是更常用的形式,用于处理命令行参数。
argc(argument count): 一个整数,表示命令行参数的个数。- 注意:
argc的值至少为 1,因为第一个参数永远是程序本身的名称。
- 注意:
argv(argument vector): 一个字符串数组(更准确地说是字符指针数组),存储了所有的命令行参数。argv[0]是程序名。argv[1]是第一个真正的参数。argv[2]是第二个,以此类推,直到argv[argc-1]。
*示例:`int main(int argc, char argv[])** 假设你编译的程序名为my_app`,在命令行中运行:
./my_app hello world 123
那么在 main 函数内部:

argc的值将是4(程序名 "my_app", "hello", "world", "123")。argv数组的内容如下:argv[0]指向字符串"./my_app"argv[1]指向字符串"hello"argv[2]指向字符串"world"argv[3]指向字符串"123"
c. int - 返回类型
int 表示 main 函数的返回类型是整型,这个返回值会传递给操作系统,作为程序执行状态的报告。
- 返回
0:表示程序成功执行完毕,没有发生任何错误,这是最常见和推荐的返回值。 - 返回非零值:通常表示程序执行过程中遇到了错误或异常,不同的非零值可以用来区分不同类型的错误,这是一种在类 Unix 系统中广泛遵循的约定(
EXIT_SUCCESS和EXIT_FAILURE宏定义在<stdlib.h>中)。
return 0; 语句
在 main 函数的末尾,我们通常会写 return 0;。
- 作用:它终止
main函数的执行,并将整数值0返回给操作系统。 - 必要性:在 C99 标准之前,
main函数执行到末尾没有return语句,其返回值是未定义的(可能是随机的),从 C99 开始,标准规定,main函数没有显式地return,则相当于执行了return 0;,但为了代码的清晰、可移植性和明确性,强烈建议总是显式地写出return 0;。
标准写法与最佳实践
a. 最基本、最标准的写法
#include <stdio.h>
int main(void) { // 使用 void 明确表示无参数,比 int main() 更清晰
printf("Hello, World!\n");
return 0;
}
#include <stdio.h>:包含了标准输入输出库,这样我们才能使用printf函数。int main(void):这是比int main()更好的写法,它用void明确地告诉编译器和阅读者,这个函数不接受任何参数,避免了歧义。
b. 带命令行参数的写法
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("程序名称: %s\n", argv[0]);
printf("参数个数: %d\n", argc);
printf("传入的参数分别是:\n");
for (int i = 1; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0; // 表示程序成功执行
}
c. 使用 exit() 函数
除了 return,你还可以使用 exit() 函数来终止程序并返回状态码。exit() 定义在 <stdlib.h> 中。
#include <stdio.h>
#include <stdlib.h> // 需要包含此头文件才能使用 exit()
int main() {
printf("程序即将退出...\n");
exit(EXIT_SUCCESS); // EXIT_SUCCESS 通常定义为 0
// 或者 exit(0);
// 这行代码永远不会被执行
printf("这行不会打印,\n");
}
return 和 exit() 的主要区别在于:
return:从当前函数返回,如果在main函数中使用,它会终止整个程序。exit():立即终止整个程序,无论它是在哪个函数中被调用的。
void main() 的说明
你可能会在一些旧的代码、非标准的教材(尤其是在 Windows 平台的 VC++ 6.0 环境下)中看到 void main() 的写法。
void main() 是非标准的,不推荐使用!
- 为什么会出现? 一些旧的、非标准的 C 编译器(如 MSVC++ 6.0)为了方便,允许
void main(),并且在这种情况下,可以省略return语句。 - 为什么不推荐?
- 不符合 C 语言标准:C89/C90, C99, C11 等所有官方标准都明确规定
main函数的返回类型必须是int。 - 可移植性差:使用
void main()的代码很可能在其他标准编译器(如 GCC, Clang)上无法编译通过。 - 无法报告错误:
void意味着不返回任何值,程序无法向操作系统报告自己的执行状态(成功或失败)。
- 不符合 C 语言标准:C89/C90, C99, C11 等所有官方标准都明确规定
*始终使用 int main(void) 或 `int main(int argc, char argv[])`。**
| 特性 | 描述 |
|---|---|
| 函数名 | main,C 程序的唯一入口点。 |
| 参数 | int main(void) (无参数) 或 int main(int argc, char *argv[]) (带命令行参数)。 |
| 返回类型 | int,用于向操作系统报告程序执行状态。 |
| 成功返回 | return 0; 或 exit(EXIT_SUCCESS); |
| 失败返回 | return 1; 或 exit(EXIT_FAILURE); (或其他非零值) |
| 最佳实践 | 始终使用 int main(void),并在函数末尾显式地 return 0;。 |
| 禁忌 | 不要使用 void main(),因为它不符合 C 标准且缺乏可移植性。 |
理解 int main() 是掌握 C 语言程序结构的第一步,也是最重要的一步。
