tags:
- Cpp
Program Arguments Handling in C++
main()
函数作为我们的程序入口,我们可以在启动程序的时候传入许多参数。偷懒的 main()
写法是这样的,但这样,你不能从外界给你的程序传入参数:
int main(){
return 0;
}
而如果你想在程序启动的时候传入数组参数,你可以使用如下的写法:
int main(int argc, char* argv[]) {
return 0;
}
如果你的程序需要特定的环境才能运行,你还可以接受 envp
参数用于访问环境变量。但请注意,这并不属于 C++ 标准:
int main(int argc, char* argv[], char* envp[]) {
return 0;
}
下面,我们就来逐步解释每个参数的含义。
argc
是传入参数的数量,这是隐式提供的。当程序启动时,操作系统会将传入字符串参数的数量隐式地提供给 main()
函数。假如我们将下面的程序编译并运行:
#include <iostream>
int main(int argc, char* argv[]
) {
for (int i = 0; i < argc; ++i) {
std::cout << "Argument " << i << ": " << argv[i] << std::endl;
}
return 0;
}
./test argv1 "hello world" # use "this is one string" to pass a string
提问,这里我们提供的参数数 argc
有多少个?答案是三个。观察输出结果:
Argument 0: ./test
Argument 1: argv[1]
Argument 2: hello world
上面在学习 argc
的时候,我们实际上已经学到了 argv
。这是一个字符串参数列表,是这三个参数中我们唯一能够提供给程序的参数。其余的 argc
和 envp
都是操作系统隐式提供给 main()
函数的。
环境变量也是系统隐式提供的。通过获取环境变量,我们能够知道我们程序的运行环境。对于依赖某些环境才能运行的程序来说,获取环境变量可以帮助此程序动态地配置运行参数。此外,环境变量可能存储一些系统相关的信息,这对于跨平台的程序而言是极其重要的。
我们可以遍历打印所有的环境变量:
#include <iostream>
int main(int argc, char* argv[], char* envp[]) {
for (int i = 0; envp[i] != nullptr; ++i) {
std::cout << "Environment Variable " << i << ": " << envp[i] << std::endl;
}
return 0;
}
在 C++ 中,标准地获取环境变量的方式是 std::getenv
。