envp代表什么? [关闭]

问题描述 投票:-1回答:4

我想知道envp的用途,例如:

int main(int argc, char **argv, char **envp);

我也想知道argv究竟代表什么:是价值或向量的v。

c++ c
4个回答
3
投票

意思是:

  • argv代表参数向量
  • argc用于参数计数,和
  • envp用于环境指针。

我们可以讨论好的或坏的命名约定,但这是一个历史用法,可以追溯到C语言的开头:B.W.KernighanD.Ritchie在1978年的第一版argc中使用argvmain()作为The C Programming language

envp was added后来来自UNIX开发,是使用environ指针的替代方案。我在1986年的一本书中找到了它的参考,但它肯定更老了。它不需要计数,因为它是空终止的。请注意,它是not portable,因此应优先使用getenv()


2
投票

在Kernighan和Ritchie,The C Programming Language,1978,argv在索引中显示,在第221页,如下:

argv论证矢量110

第110-114页的文字除了语义之外,没有进一步指示argcargv的推导。 envp没有出现在索引中。

在1988年的第二版中,相应部分的文字,第114页,说:

......两个论点。第一个(传统上称为argc,用于参数计数)是调用程序的命令行参数的数量;第二个(argv,论证矢量)是......

再次在第二版中,envp没有出现在索引中。

Unix规范,IEEE Std 1003.1-2008,2016,The Open Group Base Specifications Issue 7,在关于environexecl和相关例程的部分中说:

一些实现为main()提供了一个名为envp的第三个参数。这被定义为指向环境的指针。

这与envp代表环境指针一致。


0
投票

从C语言规范:

J.5.1环境参数 1在托管环境中,main函数接收第三个参数char *envp[],该参数指向以null结尾的char指针数组,每个指针都指向一个字符串,该字符串提供有关此程序执行环境的信息(5.1 .2.2.1)。

请注意,第三个参数未在C ++语言规范中列出,尽管某些实现仍然可以正常使用它。


0
投票

我没有研究传统论证名称的词源,所以请原谅我的推测性答案。

'env'显然意味着环境或环境变量。

envp中的'p'可以是参数的初始化,也可以是指向类型的指针。甚至可能是本程序的环境变量。

词源对于程序的意义并不重要,所以我建议不要太担心它。

© www.soinside.com 2019 - 2024. All rights reserved.