[C++] 我们常用的main()函数到底是什么?

“学习C++是一次探索之旅。”

之前本科的时候也上过C++的必修课,并且取得了不错的成绩,但是,总觉得自己的C++学习的还不够透彻,于是最近打算通读一遍Stephen Prata教授的C++Primer Plus,以此来巩固一下自己的C++知识。为了更好的加深理解,博主会不定期更新有关C++Primer Plus的学习笔记,文中若有产生疑问或者不对的地方,欢迎大家和我讨论。
  1. main函数与操作系统的关系
    对于刚刚开始学习C或C++的朋友,可能都知道在程序时候,必须定义一个main()函数作为我们程序的主体,但是虽然大部分都知道要这么做,但是却不知道为什么这么做。一般来说,C++中的大多数函数在诞生之初就是为了被其它的函数调用而存在的,在程序编写过程中,我们总会在main函数中调用许多库函数或是自定义的函数,但是,我们有没有想过,谁来调用main函数呢?
    实际上,main()通常会被启动代码调用,而启动代码是有编译器添加到程序中的,是程序和操作系统(linux,unix,windows等等)之间的桥梁。所以main函数的函数头描述的是main()和操作系统之间的接口。
    但是,需要注意的是,main不是关键字,因为它不是语言的组成部分,所以它可以做变量名,但最好别这样,这会引起其他错误。
  2. main函数在C++中的使用
    在C++中,我们可以在main函数的参数列表中用void明确指出,该函数不接受任何参数,如:int main( void ) ,我们也可以空着不填任何参数:int main()。对于C++来说,用void和空着不填完全等价,或许你会觉得这是理所应当,但是在C中,让括号空着却意味着对于是否接受参数保持沉默,而不是不接受任何参数。
    另外,新的C++标准中,如果编译器到达main()函数末尾时没有遇到返回语句,则自动添加return 0语句 (只对main函数有效),这意味着我们不需要每次写main函数时都要手动添加一个返回语句return 0; 。
  3. 有些编程环境提供一个框架程序,它会调用一些非标准函数,如_tmain() ,这种情况下,会有一个隐藏的main()来调用_tmain()。
C++中的main函数是程序执行的入口,它可以接受两种类型的参数:命令行参数和环境参数。命令行参数通常由操作系统传递给程序,用于接收用户通过命令行输入的参数;而环境参数则提供了程序运行环境的信息。下面我将分别介绍这两种参数的使用方法。 1. 命令行参数:命令行参数是通过main函数的形参来接收的,main函数可以有两个版本的参数,分别包括int argc和char *argv[],以及int argc, char *argv[], char *envp[]。其中,argc表示命令行参数的数量,argv是一个字符指针数组,存储的是指向各个参数字符串的指针。envp则是一个字符指针数组,存储的是指向环境字符串的指针,这个参数在标准C++中是可选的。 例如: ```cpp #include <iostream> int main(int argc, char *argv[]) { std::cout << "参数数量: " << argc << std::endl; for (int i = 0; i < argc; ++i) { std::cout << "参数 " << i << ": " << argv[i] << std::endl; } return 0; } ``` 在这个例子中,程序会输出参数的数量和每个参数的内容。如果在命令行中输入 `./my_program arg1 arg2 arg3`,程序将输出: ``` 参数数量: 4 参数 0: ./my_program 参数 1: arg1 参数 2: arg2 参数 3: arg3 ``` 2. 环境参数:环境参数并不直接传递给main函数,但可以通过环境变量来访问。在main函数中可以通过访问argv数组中特定的字符串来间接获取环境参数,或者使用C++标准库中的函数来直接获取环境变量。 例如,要获取名为"PATH"的环境变量,可以使用`std::getenv`函数: ```cpp #include <iostream> #include <cstdlib> // 包含getenv函数 int main() { const char* path = std::getenv("PATH"); if (path != nullptr) { std::cout << "PATH环境变量的值: " << path << std::endl; } else { std::cout << "未找到PATH环境变量" << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值