第三节 · 总指挥中心 · 主函数

在我们写过的每一个 C++ 程序中,都有一个特殊的函数——main 函数。它是程序的入口点,是一切的起点。

你有没有想过,为什么 main 函数要写成 int main() 而不是其他形式?为什么要在最后写 return 0main 函数能接收参数吗?

让我们来揭开 main 函数的神秘面纱。


main 函数的返回值

main 函数的返回类型是 int,它向操作系统报告程序的执行状态:

int main()
{
    // 程序代码
    return 0;  // 返回 0 表示程序正常结束
}

返回值 0 通常表示程序执行成功,非零值表示程序执行过程中出现了某种错误。不同的非零值可以表示不同的错误类型:

int main()
{
    // 假设这里执行了一些操作
    bool success = doSomething();
    
    if (success)
        return 0;   // 成功
    else
        return 1;   // 失败
}

在命令行中,我们可以通过特定的方式获取程序的返回值。例如在 Windows 的命令提示符中:

在 Linux/macOS 的终端中:

这在编写脚本或批处理文件时非常有用,可以根据程序的返回值决定下一步的操作。


main 函数的参数

main 函数可以接收两个参数,用于获取命令行参数:

假设我们的程序名为 hello,在命令行中这样运行:

输出将是:

注意,argv[0] 是程序本身的名字(或路径),从 argv[1] 开始才是用户提供的参数。

argv 是一个字符串数组,每个参数都是一个 C 风格字符串(char*)。也可以写成 char** argv,两种写法是等价的。


命令行参数的应用

命令行参数在实际开发中非常有用。比如,我们可以编写一个简单的计算器程序:

使用方法:


main 函数的特殊性

main 函数有一些其他函数没有的特殊性质:

  1. 程序入口main 是程序的唯一入口点,程序从这里开始执行。

  2. 不能被调用:你不能在程序中调用 main 函数,这是被禁止的。

  3. 可以省略 return:如果 main 函数结尾没有 return 语句,编译器会自动添加 return 0;

  1. 只能有一个:一个程序只能有一个 main 函数。


两种标准形式

C++ 标准规定了 main 函数的两种合法形式:

你可能见过 void main() 这种写法,但这在 C++ 标准中是不合法的,虽然某些编译器可能会接受。为了代码的可移植性,我们应该始终使用标准形式。


程序的终止

除了从 main 函数返回,还有其他方式可以终止程序:

exit 函数

exit 函数会立即终止程序,并返回指定的状态码。它可以在程序的任何地方调用,不仅限于 main 函数。

abort 函数

abort 函数会导致程序异常终止,通常会产生一个核心转储文件用于调试。


理解 main 函数的工作方式,是理解 C++ 程序执行流程的关键。作为程序的总指挥中心,main 函数承担着启动和协调整个程序的重要职责。

习题

  • 编写一个程序,接收若干个命令行参数(数字),计算并输出它们的和与平均值。

  • 修改上面的计算器程序,增加对取余运算(%)的支持。

Last updated