在C语言中,main 函数是程序的入口点,关于它的返回值,有几个核心概念需要掌握:

(图片来源网络,侵删)
返回值的含义
main 函数的返回值(通常是 int 类型)被称为退出码(Exit Code)或退出状态(Exit Status)。
- 0:通常表示程序成功执行。
- 非0:通常表示程序发生了错误或异常终止。
谁来接收这个返回值? 这个值会返回给操作系统或调用该程序的父进程,在写脚本(Shell/Batch)时,可以通过判断这个返回值来决定下一步的操作。
两种标准写法
C语言标准(C99 及之后)推荐以下两种写法:
不带参数(最常用)
int main(void) {
// 你的代码
return 0;
}
这里的 void 明确表示 main 函数不接受任何参数。

(图片来源网络,侵删)
带命令行参数
int main(int argc, char *argv[]) {
// 你的代码
return 0;
}
argc:参数个数。argv:参数字符串数组。
常见错误与历史遗留问题
void main() 是错误的吗?
在早期的教材(如谭浩强风格)或非标准编译器(如旧版 Turbo C)中,你可能会看到:
void main() { // ❌ 不推荐,非标准
// ...
}
在现代标准 C(ANSI C, C99, C11 等)中,void main() 是非标准的,虽然某些编译器(如 Visual Studio)为了兼容旧代码允许通过,但它不可移植,且不符合规范。请始终使用 int main()。
如果不写 return 会怎样?
在 C99 标准之前,main 函数结尾没有写 return 0;,程序会返回一个随机的垃圾值(未定义行为)。
但在 C99 标准之后,如果程序员显式地定义了 int main() 但在结尾没有写 return 语句,编译器会自动在结尾补上 return 0;。
尽管如此,为了代码的可读性和明确意图,建议显式写出 return 0;。
如何查看程序的返回值?
在 Windows (CMD) 中
程序运行结束后,输入:
echo %ERRORLEVEL%
如果输出 0,说明程序正常结束。
在 Linux / macOS (Terminal) 中
程序运行结束后,输入:
echo $?
另一种退出方式:exit()
除了使用 return,你还可以使用 <stdlib.h> 中的 exit() 函数。
exit(0)等同于return 0;(在 main 函数中)。exit(EXIT_SUCCESS)(通常等于0)表示成功。exit(EXIT_FAILURE)(通常等于1)表示失败。
区别:
return仅用于结束当前函数,如果在main中,就是结束程序。exit()可以在程序的任何函数中调用,调用后整个程序立即终止。
总结最佳实践
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("Hello, World!\n");
// 程序成功执行,返回 0
return 0;
// 如果中间出错想退出,可以用:
// exit(EXIT_FAILURE);
}
