envp 代表什么?

nng*_*ngm 3 c c++ abbreviation argv

我想知道缩写envp代表什么,例如这里:

int main(int argc, char **argv, char **envp);
Run Code Online (Sandbox Code Playgroud)

我也想知道vinargv最初代表什么。是v为了“价值”吗?或者也许是“矢量”?

Chr*_*phe 7

意思是:

  • argv代表ARG ument v埃克特
  • argc对于ARG ument Ç 'mount
  • envp对于ENV ironment p ointer

我们可以讨论命名约定的好坏,但这是一种历史用法,可以追溯到 C 语言的开始:BWKernighanD.Ritchie在 1978 年的第一版The C Programming language中已经使用argcargvfor 。main()

envp 溶液中加入从UNIX发展以后,是使用一种替代environ的指针。我在 1986 年的一本书中找到了对它的引用,但它肯定更旧。它不需要计数,因为它是空终止的。请注意,它不可移植,因此getenv()应首选使用。

  • 在 Kernighan 和 Ritchie,*The C Programming Language* 中,“argv”在索引中显示为“参数向量”,而不是“参数值”。建议的格式:**arg**ument **v**ector、**arg**ument **c**ount、**env**ironment **p**ointer。 (2认同)

Eri*_*hil 5

在 Kernighan 和 Ritchie 的《C 编程语言》,1978 年,argv第 221 页的索引中显示为:

\n\n
\n

argv参数向量\xe2\x80\x83110

\n
\n\n

第 110-114 页上的文本除了其语义之外,没有进一步说明argc或 的派生。没有出现在索引中。argvenvp

\n\n

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

\n\n
\n

\xe2\x80\xa6 两个参数。第一个(通常称为argc参数计数)是调用程序时使用的命令行参数的数量;第二个(argv,对于参数向量)是\xe2\x80\xa6

\n
\n\n

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

\n\n

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

\n\n
\n

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

\n
\n\n

这与环境指针envp含义是一致的。

\n