c & c++ 中 main 函数形参
main函数参数的扩展,特别是从无参数到三个参数的变化,源于C和C++语言的发展及不同操作系统对程序启动方式的需求。
传统的main函数签名
在早期的C标准中,main函数的签名通常有两种形式:
int main(void)- 无参数。int main(int argc, char *argv[])- 有两个参数,分别为:argc: 参数个数,类型为int。argv: 参数列表,类型为指向字符串数组的指针,即char *argv[]或char **argv。
这两种形式是经典的main函数签名,用于接收命令行参数。
第三个参数的引入
第三个参数——char *envp[],是为了提供对环境变量的访问,某些平台支持main函数的第三个参数。这种形式的main函数通常如下:
1 | int main(int argc, char *argv[], char *envp[]); |
envp[]: 这是一个指向字符串数组的指针,其中每个字符串表示一个环境变量。环境变量通常以"NAME=VALUE"的形式表示。
引入背景
- 环境变量支持: 某些操作系统(例如Unix和某些Linux发行版)支持通过
envp[]参数来传递环境变量。这为程序提供了一种直接访问环境变量的方式,尽管并不是所有的平台都强制要求使用这个参数。 - POSIX标准: 虽然POSIX标准中
main函数的签名并没有强制规定必须包含envp[]参数,但它在许多Unix和Unix-like系统中是可用的。
三个参数形式的应用
这种带有第三个参数的main函数形式主要应用于以下情况:
- 程序需要直接访问环境变量而不通过标准库函数(如
getenv())。 - 某些嵌入式系统或特殊环境下,操作系统会以这种方式启动程序。
- 某些历史上使用特定C编译器或平台,可能默认提供了这第三个参数。
标准化和使用现状
现代的标准C和C++规范并没有明确规定main函数必须使用第三个参数。标准的main签名依然是int main(void)或int main(int argc, char *argv[])。但在实现上,许多编译器依然支持带有envp[]的第三个参数作为一种扩展。
总结
第三个参数envp[]在Unix和类似操作系统中开始流行,主要用于程序对环境变量的访问。虽然现代标准中不强制使用这个第三个参数,但它在某些特定场合仍然可用。
You need to set
install_url to use ShareThis. Please set it in _config.yml.