我在旧的C程序中看到main()
的这个非常不同的定义。 (编译,使用gcc)
main(argc, argv)
int argc;
char *argv[];
{
...
...
}
声明了什么类型的变量以及它们为什么在函数括号开始之前完成?
答案 0 :(得分:3)
这是C中的旧式函数定义。这种非原型样式在C标准中标记为过时,不应使用。
在C中不再允许省略返回类型(隐式int
)。
答案 1 :(得分:1)
它隐含地按照C规范返回int
(尽管其中的其他答案以及在C99中已经过时的链接问题?),就像具有未声明的返回类型的函数一样。
这是一种旧式的宣言,它来自Fortran。
main(argc, argv)
int argc;
char *argv[];
准确地告诉您您的期望 - 该argc是int
而argv
是char *
的结尾。
答案 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
,但你仍会在一些旧代码中看到它。