envp代表什么?

8
我想知道缩写词envp代表什么,比如在这里的例子:
int main(int argc, char **argv, char **envp);

我也想知道argv中的v最初代表什么。
是代表“value”(值)吗?还是可能代表“vector”(向量)?


4
根据我查到的资料(为什么你没查?),它似乎是环境变量,而且似乎不具备可移植性,因此您不应该使用它。 - Arnaud Denoyelle
没有上下文和缩写,什么都可能意味着。ENVP。 - 463035818_is_not_a_number
如果是“环境变量”,那么字母‘p’去哪了? - nngm
3
@nngm P代表指针。 - Christophe
argc表示参数数量,envp表示环境变量指针。在C和C++中,它们通常用作程序入口点的参数。 - phuclv
显示剩余2条评论
4个回答

13

意思是:

  • argv 代表 argument vector
  • argc 代表 argument count
  • envp 代表 environment pointer

我们可以讨论命名规范的好坏,但这是一个历史悠久的用法,可以追溯到 C 语言的开端:B.W.KernighanD.Ritchie 在他们 1978 年的第一版 The C Programming language 中就已经使用了 argcargv 来表示 main()

envp是后来从UNIX开发中添加的,是使用environ指针的替代方法。我在一本1986年的书中找到了它的参考资料,但它肯定更早。它不需要计数,因为它是以空值结尾的。请注意,它不可移植,因此应优先使用getenv()


名称只是历史教科书的名称,可以使用任何标识符代替。 - Serge
1
@Serge 确实。这只是一种惯例。OP只是想知道为什么它被称为那样。 - Christophe
3
在Kernighan和Ritchie的《C程序设计语言》一书中,"argv"在索引中被标为"argument vector"而不是"argument value"。建议的格式为:argument vector(参数向量)、argument count(参数计数)、environment pointer(环境指针)。 - Eric Postpischil
1
@EricPostpischil非常好的想法! 谢谢! 已完成 ✅ - Christophe
argv[argc] 也是 NULL(因此 argv 也是以 null 结尾的)。因此 argc 也是多余的。不是吗? - Sourav Kannantha B
显示剩余4条评论

5
在Kernighan和Ritchie的1978年版《C语言程序设计》中,第221页的索引中列出了argv,如下所示:

argv argument vector 110

第110至114页的文本没有进一步说明argcargv的派生,除了它们的语义。在索引中没有出现envp
在1988年的第二版中,相应章节的第114页上的文本如下所示:

…两个参数。第一个(通常称为argc,表示参数计数)是程序调用时使用的命令行参数数量;第二个(argv,表示参数向量)是…

同样在第二版中,索引中没有出现envp
Unix规范IEEE Std 1003.1-2008(2016年),《开放组基础规范问题7》,在有关environexecl和相关例程的章节中说:

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

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

1
有趣!我只有第一个版本,在那里vector只出现在索引中。顺便说一下,envp的使用要早得多,因为我已经在Maurice Bach的1986年著作《UNIX®操作系统设计》中找到了它的提及,即指向执行程序的环境**的字符指针数组 - Christophe

1

来自C语言规范:

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

请注意,这第三个参数没有在C++语言规范中列出,但某些实现仍然可以使用它。


0

我没有研究传统参数名称的词源,故请原谅我的推测性答案。

'env' 显然意为环境或环境变量。

envp 中的 'p' 可能是 parameter(s) 的首字母缩写,或者可能指向该类型的指针。甚至可能是程序的环境变量Program.

词源对程序的含义并不重要,因此建议不要过于担心。


只是一种智力好奇心 :) - nngm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接