我想知道envp
的用途,例如:
int main(int argc, char **argv, char **envp);
我也想知道argv
究竟代表什么:是价值或向量的v。
意思是:
argv
代表参数向量argc
用于参数计数,和envp
用于环境指针。我们可以讨论好的或坏的命名约定,但这是一个历史用法,可以追溯到C语言的开头:B.W.Kernighan和D.Ritchie在1978年的第一版argc
中使用argv
和main()
作为The C Programming language。
envp
was added后来来自UNIX开发,是使用environ
指针的替代方案。我在1986年的一本书中找到了它的参考,但它肯定更老了。它不需要计数,因为它是空终止的。请注意,它是not portable,因此应优先使用getenv()
。
在Kernighan和Ritchie,The C Programming Language,1978,argv
在索引中显示,在第221页,如下:
argv
论证矢量110
第110-114页的文字除了语义之外,没有进一步指示argc
或argv
的推导。 envp
没有出现在索引中。
在1988年的第二版中,相应部分的文字,第114页,说:
......两个论点。第一个(传统上称为
argc
,用于参数计数)是调用程序的命令行参数的数量;第二个(argv
,论证矢量)是......
再次在第二版中,envp
没有出现在索引中。
Unix规范,IEEE Std 1003.1-2008,2016,The Open Group Base Specifications Issue 7,在关于environ
,execl
和相关例程的部分中说:
一些实现为main()提供了一个名为envp的第三个参数。这被定义为指向环境的指针。
这与envp
代表环境指针一致。
从C语言规范:
J.5.1环境参数 1在托管环境中,
main
函数接收第三个参数char *envp[]
,该参数指向以null结尾的char指针数组,每个指针都指向一个字符串,该字符串提供有关此程序执行环境的信息(5.1 .2.2.1)。
请注意,第三个参数未在C ++语言规范中列出,尽管某些实现仍然可以正常使用它。
我没有研究传统论证名称的词源,所以请原谅我的推测性答案。
'env'显然意味着环境或环境变量。
envp中的'p'可以是参数的初始化,也可以是指向类型的指针。甚至可能是本程序的环境变量。
词源对于程序的意义并不重要,所以我建议不要太担心它。