3

我们有

int main(int argc, char** argv, char** envc)

对于普通人。但我想知道是否有任何其他参数 main 可以代替这些。如果有的话,它指向什么?

4

5 回答 5

6

好吧,这是细分:

  • argc-- C标准
  • argv-- C标准
  • env-- 适用于大多数 UNIX 和 MS Win,但不是标准的
  • apple-- Mac OSX 和 Darwin 作为第四个参数传递的其他信息
于 2012-08-18T17:20:11.050 回答
4

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[]),其中第三个参数包含指向环境的指针。其他扩展是可以想象的;检查您平台的文档。

于 2012-08-18T17:30:45.443 回答
3

只有 argc 和 argv 是标准参数。之后的任何事情都取决于您的系统和编译器。

于 2012-08-18T17:20:02.917 回答
2

我认为这回答了你的问题:

http://en.wikipedia.org/wiki/Main_function#C_and_C.2B.2B

于 2012-08-18T17:23:24.260 回答
1

它是标准的扩展:
但它应该提供对环境的访问:

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]);
    }
}
  • argc:argv 中有效元素的数量
  • argv:用于命令行参数的 C 字符串数组。
  • envc:环境的 C 字符串数组(由 NULL 指针终止)。

最好使用getenv

char * getenv ( const char * name );

http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

于 2012-08-18T18:00:33.043 回答