这是main()的有效定义吗?

thi*_*his 8 c standards language-lawyer c11

C11标准声明:

5.1.2.2.1程序启动

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

    int main(void) { /* ... */ }
    
    Run Code Online (Sandbox Code Playgroud)

    或者有两个参数(这里称为argcargv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):

    int main(int argc, char *argv[]) { /* ... */ }
    
    Run Code Online (Sandbox Code Playgroud)

    或同等学历; 10),或以某种其他实现定义的方式.


10)因此,int可以被typedef定义为的名称替换int,或者argv可以写成类型char ** argv,等等.

我们将忽略这一部分:或者以其他一些实现定义的方式.因为我只对与上述两个例子相当的定义感兴趣.

这是否是main的有效定义,char* a[4]并且char**是等效的:

int main(int argc, char* argv[4]){/*...*/}
Run Code Online (Sandbox Code Playgroud)

我们假设一个VLA数组如何printf返回一个正的int值:

int main(int argc, char* argv[printf("Hello there!")]){/*...*/}
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 5

是的,这都是"或同等的"所涵盖的.有关重命名参数或使用typedefed类型的脚注仅是示例.

我最喜欢的变种是

int main(int argc, char* argv[argc+1]){/*...*/}
Run Code Online (Sandbox Code Playgroud)

因为它拥有关于所有main函数语义的最多信息.