C语言 envp是什么意思?

oknrviil  于 2023-05-06  发布在  其他
关注(0)|答案(4)|浏览(289)

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

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

我也想知道argv中的v最初代表什么。v代表“价值”吗?或者是“向量”?

0yg35tkg

0yg35tkg1#

其含义是:

  • argv代表*参数参数v向量 *
  • argc forargumentcount,以及
  • envp用于environmentpointer

我们可以讨论好的或坏的命名约定,但它是一个历史性的用法,可以追溯到C语言的开始:B.W.KernighanD.Ritchie在1978年的第一版The C Programming language中已经使用argcargv作为main()
envpwas added是UNIX开发的后续版本,是使用environ指针的替代方案。我在1986年的一本书中找到了它的参考资料,但它肯定更古老。它不需要计数,因为它是空终止的。请注意,它是not portable,因此应首选使用getenv()

xtupzzrd

xtupzzrd2#

在Kernighan和里奇的《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代表environmentpointer一致。

ibps3vxo

ibps3vxo3#

C语言spec:

J.5.1环境参数

1在托管环境中,main函数接收第三个参数char *envp[],它指向一个空终止的char指针数组,每个指针都指向一个字符串,该字符串提供有关程序执行环境的信息(5.1.2.2.1)。
注意, C++ 规范中没有列出第三个参数,尽管有些实现仍然可以使用它。

mklgxw1f

mklgxw1f4#

我没有研究过常规参数名称的词源,所以请原谅我的推测性回答。
“env”显然意味着环境或环境变量。
envp中的'p'可能是参数的初始化,或者可能是指向类型的指针。甚至可能是P程序的环境变量。
词源对于程序的意义并不重要,所以我建议不要太担心它。

相关问题