我查看了史蒂文斯,并在Posix程序员指南中,我能找到的最好的是
当流程开始时,可以使用称为环境的字符串数组.外部变量指向此数组,外部变量
environ定义为:
extern char **environ;
它是ENVIRON已经我犹豫变量.我想说
- 调用进程/ shell已经分配了空终止字符串块
- 'external'变量environ用作getenv()的入口点.
- 事实上可以随意在静态初始化程序中调用getenv().
但我无法保证environ的"静态初始化" 优先于所有其他静态初始化代码.我是否想过这个?
在我的平台上(AMD Opteron,Redhat 4,GCC 3.2.3),设置LD_DEBUG表明在调用静态初始化程序之前environ已设置.这是一个很好的事情要知道; 谢谢,@ codelogic.但这并不一定是我在所有平台上得到的结果.
此外,虽然我直观地同意@ChrisW关于C/C++运行时库的行为,但这只是我基于经验的直觉.所以任何能够在静态初始化程序之前使用来自某个地方的权威保证环境的人都会被称为奖励积分!