C main()还可以接受其他参数吗?

C main()还可以接受其他参数吗?,c,arguments,main,argv,argc,C,Arguments,Main,Argv,Argc,我最近在搜索C中的环境变量时遇到了以下问题: int main (int argc, char *argv[], *char *envp[]) 我到处找了找,找不到任何关于我的问题的结论 main()可以接受的所有可用参数是什么?另一种是宽字符版本: int main(int argc, wchar_t* argv[], wchar_t* envp[]) 下面指定了main函数,除了特定于实现的入口点函数(如Apple的第三个Apple参数)或Microsoft函数的get out子句外,没

我最近在搜索C中的环境变量时遇到了以下问题:

int main (int argc, char *argv[], *char *envp[])
我到处找了找,找不到任何关于我的问题的结论


main()
可以接受的所有可用参数是什么?

另一种是宽字符版本:

int main(int argc, wchar_t* argv[], wchar_t* envp[])
下面指定了
main
函数,除了特定于实现的入口点函数(如Apple的第三个
Apple
参数)或Microsoft函数的get out子句外,没有提供其他函数签名

5.1.2.2.1程序启动 程序启动时调用的函数名为
main
。实现没有声明此函数的原型。它应定义为int返回类型,且无参数:

int main(void) { /* ... */ }
或具有两个参数(此处称为
argc
argv
,但可以使用任何名称,因为它们是声明它们的函数的本地名称):

或同等的,或以某种其他实现定义的方式。 如果已声明,则主功能的参数应遵守以下约束:

  • argc
    的值应为非负
  • argv[argc]
    应为空指针
  • 如果
    argc
    的值大于零,则数组成员
    argv[0]
    通过
    argv[argc-1]
    应包含指向字符串的指针,这些指针是给定的 程序启动前主机环境定义的实现值。目的是向程序提供在程序启动之前从托管环境中的其他位置确定的信息。如果主机环境无法提供包含大写和小写字母的字符串,则实现应确保以小写字母接收字符串
  • 如果argc的值大于零,则由
    argv[0]
    表示程序名
    argv[0][0]
    如果 程序名在主机环境中不可用。如果
    argc
    的值为 大于1时,
    argv[1]
    通过
    argv[argc-1]
    表示程序参数
  • 程序应可修改参数
    argc
    argv
    以及
    argv
    数组指向的字符串,并在程序启动和程序终止之间保留其最后存储的值

C99和C11标准草案允许对
main
执行定义的参数集,这些参数将特定于这些系统(不可移植)。从章节
5.1.2.2.1

[…]或以某种其他实现定义的方式[…]

我能找到的唯一记录的附加参数是
envp
apple
,我们可以在以下内容中找到很好的描述:

<>其他的与平台相关的格式也允许C和C++使用 标准,除了C++中的返回类型必须总是int;[6] 例如,Unix(虽然不是POSIX.1)和Microsoft Windows都有 第三个参数给出了程序的环境,否则是可访问的 通过stdlib.h中的getenv:

int main(int argc, char **argv, char **envp);
Mac OS X和Darwin有第四个参数,其中包含任意 操作系统提供的信息,如执行二进制文件的路径:[7]

int main(int argc, char **argv, char **envp, char **apple);
看起来Windows有一个需要
wchar\t

int wmain(int argc, wchar_t *argv[], wchar_t *envp[]);

我知道除了
argc
argv
之外的任何添加都是实现定义的,并且将特定于特定的系统。请参阅其中也涵盖了这个问题,尽管它似乎没有对Shafik Yaghmour提到的
char**apple
参数的x-ref。
int wmain(int argc, wchar_t *argv[], wchar_t *envp[]);