c & c++ 中 main 函数形参

main函数参数的扩展,特别是从无参数到三个参数的变化,源于C和C++语言的发展及不同操作系统对程序启动方式的需求。

传统的main函数签名

在早期的C标准中,main函数的签名通常有两种形式:

  1. int main(void) - 无参数。
  2. 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.