standards - c 是 main ( )的有效定义

  显示原文与译文双语对照的内容

C11标准声明:

5.1.2.2. 1程序启动

程序启动时调用的函数名为 main 。 实现不声明这里函数的Prototype 。 应使用 int的返回类型定义,且不带参数:


int main(void) {/*.. . */}



或者使用两个参数( 称为 argcargv,尽管任何名称都可以使用,因为它们是声明的函数的本地函数。):


int main(int argc, char *argv[]) {/*.. . */}



或者等效;10 ),或者以其他实现方式定义。

10 ),可以将int替换为定义为 inttypedef 名称,或者 argv的类型可以写为 char ** argv,等等。

我们将忽略这里部分: 或者以其他实现方式定义。 ,因为我只关注于上述两个例子中的定义。

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


int main(int argc, char* argv[4]){/*...*/}



我们假设一个 VLA array 将返回一个正的int值:


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



时间: 原作者:

是的,这些都被"或者等效"覆盖了。 有关重命名参数或者使用 typedef 类型的脚注只是示例。

我最喜欢的变种是


int main(int argc, char* argv[argc+1]){/*...*/}



因为它具有关于所有 main 函数的语义的最大信息。

原作者:

int main(int argc, char* argv[4]){/*...*/} 



main的有效签名。 编译器将忽略 char argv[4] 中的4,它相当于 char argv[] = char **argv 第二个签名也一样。

原作者:
...