【发布时间】:2012-08-14 18:38:49
【问题描述】:
我们有
int main(int argc, char** argv, char** envc)
对于普通人。但我想知道是否有任何其他参数 main 可以代替这些。如果有的话,它指向什么?
【问题讨论】:
我们有
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[]),其中第三个参数包含指向环境的指针。其他扩展是可以想象的;检查您平台的文档。
【讨论】:
int 不同。
main,无论是在C 还是C++ 中。我所说的一切仅适用于托管环境。
只有 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 );
【讨论】: