我们有
int main(int argc, char** argv, char** envc)
对于普通人。但我想知道是否有任何其他参数 main 可以代替这些。如果有的话,它指向什么?
好吧,这是细分:
argc
-- C标准argv
-- C标准env
-- 适用于大多数 UNIX 和 MS Win,但不是标准的apple
-- Mac OSX 和 Darwin 作为第四个参数传递的其他信息C 和 C++ 中的答案不同:
在 C++ 中,main
必须始终返回int
. 每个实现都必须接受()
和(int, char**)
签名。实现可以接受任何其他签名。如果接受的签名以 开头int, char**, ...
,则应具有通常的含义。(另外,main
获取 C 链接,不能被重载,不能是模板,也不能被调用。)
在 C 中,main
可以采用任何形式。但是,每个实现都必须接受int(void)
和int(int, char**)
类型。
正如您所注意到的,某些环境支持并符合这些准则的一个流行签名是int main(int argc, char * argv[], char * env[])
,其中第三个参数包含指向环境的指针。其他扩展是可以想象的;检查您平台的文档。
只有 argc 和 argv 是标准参数。之后的任何事情都取决于您的系统和编译器。
它是标准的扩展:
但它应该提供对环境的访问:
int main(int argc, char** argv, char** envc)
{
// It is an array of pointers to C-String
// The array is terminated with a NULL pointer.
// So you can loop over with it like this.
for(int loop = 0;envc[loop] != NULL; ++loop)
{
fprintf(stdout, "%s\n", envc[loop]);
}
}
最好使用getenv
:
char * getenv ( const char * name );