C++ 里的 int main() 是什么?
一句话:int main() 是每个 C++ 程序的入口 — 操作系统启动你的代码时调用的函数。那个 int 是程序结束时交回的退出状态。
运行一个程序时,操作系统并不是"直接跑你的文件"。它加载程序、做些准备工作,然后调用一个名字必须恰好是 main 的函数 — 全小写,一字不差。main 里写什么,什么就先执行。main 结束时程序退出,你返回的整数就成了程序的退出状态。
最小的真实程序
跑一下,然后看输出下面那行 — 练习场会把退出码报给你:
#include <iostream>
using namespace std;
int main() {
cout << "The program is running." << endl;
return 0;
}
返回值到底干什么用
你 return 的数字会交还给操作系统。按惯例,0 表示"一切正常",非零表示出了问题 — 具体是几由你定。工具链都在用:构建系统、测试运行器、shell 脚本都靠检查退出码决定上一步是否成功。
#include <iostream>
using namespace std;
int main() {
cout << "Pretending something went wrong..." << endl;
return 42;
}
在你自己的电脑上也能看到这个数:编译运行后,在终端输入 echo $?(Linux/Mac)或 echo %ERRORLEVEL%(Windows cmd)— shell 会打印 main 返回的码。
两种标准签名
C++ 标准只允许两种形式:
int main() // 不带命令行参数
int main(int argc, char* argv[]) // 带命令行参数
argc(argument count)是程序名后面跟了几个词。argv(argument vector)是装着这些词的字符串数组;argv[0]是程序自己的名字。- 其他写法 —
void main()、double main()、int Main()— 要么不标准,要么只是一个永远不会被调用的普通函数。
必须写 return 0; 吗?
不必 — main 是 C++ 里唯一一个"走到结尾就默认返回 0"的函数。很多风格指南仍然显式写出来;两种都对。但在其他所有函数里,非 void 函数忘记 return 是未定义行为,别在这里养成习惯。
新手常见错误
void main()— 有些编译器接受,但不是标准 C++。写int main();不费任何代价,还到处能编译。Main()、MAIN()— C++ 区分大小写;操作系统只找main。- 整个程序没有
main— 其他函数的代码都编译过了,然后链接器报undefined reference to 'main'或unresolved external symbol main。看到这个错,意思是:没有入口。 - 一个程序里出现两个
main— 比如两个.cpp各写了一个。链接器会拒绝:每个可执行文件恰好一个main。
相关的面试追问
- "
main能调用自己吗?" 技术上可以(main里递归合法,虽然很怪);程序会一直重启自己的逻辑直到栈爆。 - "
main能重载吗?" 不能 — 标准把它固定为上面两种形式。 - "返回值去哪了?" 交给进程的退出状态,父进程可见 — shell、构建工具、测试框架。
- "
main之前有代码运行吗?" 有:全局/静态对象的构造函数先跑。这是区分"读过 C++"和"调过 C++"的经典题。
去练习场练手
- 写一个打印你名字、返回
7的main;在输出面板确认退出码。 - 故意弄坏:把
main改名Main,读一读报错(真编译器下这是链接错误不是编译错误 — 值得知道区别)。 - 加一个新函数,从
main调它,返回它的结果。
下一篇:main 里通常在循环 — 看C++ for 与 while 循环,以及逐行讲解的Hello World 一课。