深入浅出 C++:main()

本文详细探讨了C++中main()函数的各个方面,包括标准函数原型、调用过程、非标准形式以及早期C语言的写法。main()作为程序执行的入口点,其返回值和参数各有含义,而在不同平台和编译器中,main()的实现和调用方式有所不同。文章通过示例和调试工具揭示了main()背后的运行机制。
摘要由CSDN通过智能技术生成

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
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值