我知道main
函数可以接受两个参数:int argc
和char* argv[]
。这是有据可查的。然而,main
函数也可以接受第三个参数。有人知道这个论点是什么吗?
这是环境变量,与正常的argv
类型相同。虽然它不是c++标准的一部分,但在某些系统上仍然可以工作。
它来自较旧的UNIX系统,其中环境变量通常是这样传递的。
函数main
在Mac OS上可能还有第四个参数,形式为char **apple
, "包含任意OS提供的信息"。
只有两种形式的main
是需要的支持,并且可移植到所有平台。但是一个实现可以添加任何它想要的额外形式:int main(
double )
将是合法的,例如(尽管我从未听说过)使用它的实现),int main( char
const* arg0... )
也是如此。在实践中,"经典"Unix将支持int main( int argc, char** argv, char** environ )
;这是不是Posix要求的,并且可能有一些Unix这并不支持它。在Unix世界之外,很多是早期的C实现试图看起来像Unix,也可能如此支持这个(现在更多是出于向后兼容性的原因)
为了传递一组不同的环境变量,可以传递char *env[]
,但是不需要这样命名它。您可以更改特定进程执行的环境。
看这篇文章,有解释