我们今天开始学习环境变量,在此之前我们先接触一下命令行参数是什么
命令行参数
如上图所示,没想到main函数还可以带参数,argc和argv就是命令行参数,argc在C++11里面叫可变参数模板,这里同样可变,argc是参数的个数,char* argv是一个数组,叫参数的清单。运行上面代码可知如下结论:
1。在makefile里面加上-std=c99,因为之前的版本不支持直接在for循环中定义参数。我们可以看./code后面不加任何的参数,argc默认为1,每多加一个argc和argv就多添加一个,这不就和命令行指令带选项很像了吗。后面带着不同的选项argv和argc就有不同的效果。
所以为什么要有命令行参数,就是为了使同一个程序可以根据选项的不同表现出不同的功能,比如:指令中的选项。
那main函数的这些可变参数是谁在传递的呢,ls -a -l -n这么多选项其实就是一个字符串,当你输入的时候首先被shell拿到,字符串就相当于进程了,shell调度这个进程,将这些选项拆解为若干个单个的选项,然后形成一张argv表和其拆解的元素个数argc,argv表存储指令对应的效果,最后以NULL结尾,这些命令行在起动的时候父进程都是shell。
2。编译器,操作系统,加载器不是互相割裂的,彼此有关系。
举例论证命令行参数
我们可以写一个程序来验证命令行参数可以使同一个程序可以根据选项的不同表现出不同的功能。如下:
代码不解释哈。
可以看到确实带了不同选项就体现了不同功能。
环境变量(env)
环境变量存放在env数组里面,操作系统有多个环境变量。