在C中声明main的不同方法

时间:2012-11-08 18:27:01

标签: c

  

可能重复:
  Alternate C syntax for function declaration use cases

我在旧的C程序中看到main()的这个非常不同的定义。 (编译,使用gcc)

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

   }

声明了什么类型的变量以及它们为什么在函数括号开始之前完成?

5 个答案:

答案 0 :(得分:3)

这是C中的旧式函数定义。这种非原型样式在C标准中标记为过时,不应使用。

在C中不再允许省略返回类型(隐式int)。

答案 1 :(得分:1)

它隐含地按照C规范返回int(尽管其中的其他答案以及在C99中已经过时的链接问题?),就像具有未声明的返回类型的函数一样。

这是一种旧式的宣言,它来自Fortran。

main(argc, argv)
   int argc;
   char *argv[];

准确地告诉您您的期望 - 该argc是intargvchar *的结尾。

答案 2 :(得分:1)

这被称为K& R风格的定义。您基本上只列出参数并在结束参数括号和开始大括号之间声明它们。

答案 3 :(得分:1)

这是一种旧的KnR C风格,1989年之前的C(非标准)。这是一种将参数传递给函数的方法..不仅使用main(),而且还包含其他函数。

例如:

void non_main(argx, argy)
int argx,argy;
{
   /*do something here*/
}

答案 4 :(得分:1)

这只是指定main参数类型的另一种方法。它完全等同于main(int argc, char *argv[])。这被称为K& R风格,因为它是原始C编译器和K& R书籍中使用的原始风格。它被认为是过时的;它与C ++不兼容。有一个GCC选项可以警告它-Wold-style-definition,但你仍会在一些旧代码中看到它。