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[])  // 带命令行参数

必须写 return 0; 吗?

不必 — main 是 C++ 里唯一一个"走到结尾就默认返回 0"的函数。很多风格指南仍然显式写出来;两种都对。但在其他所有函数里,非 void 函数忘记 return 是未定义行为,别在这里养成习惯。

新手常见错误

相关的面试追问

  1. "main 能调用自己吗?" 技术上可以(main 里递归合法,虽然很怪);程序会一直重启自己的逻辑直到栈爆。
  2. "main 能重载吗?" 不能 — 标准把它固定为上面两种形式。
  3. "返回值去哪了?" 交给进程的退出状态,父进程可见 — shell、构建工具、测试框架。
  4. "main 之前有代码运行吗?" 有:全局/静态对象的构造函数先跑。这是区分"读过 C++"和"调过 C++"的经典题。

去练习场练手

  1. 写一个打印你名字、返回 7 的 main;在输出面板确认退出码。
  2. 故意弄坏:把 main 改名 Main,读一读报错(真编译器下这是链接错误不是编译错误 — 值得知道区别)。
  3. 加一个新函数,从 main 调它,返回它的结果。

下一篇:main 里通常在循环 — 看C++ for 与 while 循环,以及逐行讲解的Hello World 一课。