main() 是 C/C++ 程序执行的进入点,操作系统执行程序时,首先会执行 Runtime Library 内的函数进行必要的初始化,接着才调用 main() 转移控制权,当 main() 返回时,再根据 main() 的返回值调用 exit() 结束程序。
main() 的标准函数原型 (Function Prototype)
第一种标准写法,是不带参数的:
#include <cstdlib>
int main()
{
return EXIT_SUCCESS;
}
main() 的返回值代表程序的结束状态。使用 cstdlib 是为了引入 EXIT_SUCCESS 这个 macro,回传它或 0 代表程序成功执行,而相对的,回传 EXIT_FAILURE 则代表由错误发生。C++ 标准并未定义 EXIT_SUCCESS 对应哪个整数。
值得留意的是,C++ 严格规定,如果函数宣告时有返回值类型 (return type),就必须有代码明确给出返回值。但 main() 例外,它可以省略 return EXIT_SUCCESS 那一行,此时效果成功结束。
第二种 main() 的写法带有两个参数 (parameter),允许用户在命令行模式运行程序时,指定一至数个引数 (argument):
#include <cstdlib>
#include <iostream>
int main(int argc, char* argv[])
{
for (int i = 0 ; i < argc ; ++i)
std::cout << "parameter " << i << " : " << argv[i] << std::endl;
return EXIT_SUCCESS;
}
参数 argc 记录当程序执行时,传入的引数个数,argv 则是类型为 char** 的指针 (pointer),指向一个字符串数组 (string array),该数组长度为 argc + 1。argv[0] 至 argv[argc - 1] 为执行程序时传入的引数;argv[argc] 为 0,代表空字符串。语法上,第二个参数的宣告,也可以写成 char** argv,但较常见的写法仍是 char* argv[],因为它明确表达了 argv 指向一个字符串数组。
上面程序执行结果如下:
sora@sora-VirtualBox:~/cpp/c1$ clang++ -std=c++17 -stdlib=libc++ --pedantic-errors -pthread -o main main.cpp sora@sora-VirtualBox:~/cpp/c1$ ./main -s -t --version "test" \"test\" 'test' \'test\' Argument 0 : ./main Argument 1 : -s Argument 2 : -t Argument 3 : --version Argument 4