这是编写 C 函数的一种陈旧过时的方法。
在 C 的祖先语言中,没有类型:所有变量都包含一个机器字。所以一个函数定义会像这样开始:
main(u, _, a) {
/* ... some code ... */
}
过去的 C被称为“K&R C”,被关于 C 的开创性书籍的作者(Brian Kernighan 和 Dennis Ritchie)以一种看起来像变量声明的形式添加了类型,并且位于函数参数列表和函数的代码。
int main(u, _, a)
int u;
int _;
char *a;
{
/* ... some code ... */
}
在 K&R C 中,如果一个类型是int
,那么在很多地方它可以被省略。对于函数参数,您可以完全省略类型声明行。
int main(u, _, a)
char *a;
{
/* ... some code ... */
}
ANSI C于 1989 年标准化,其主要创新之一是函数原型。在正确的 ANSI C 中,您在使用前声明所有函数,并声明所有参数的类型。
int main(int u, int _, char *a)
{
/* ... some code ... */
}
C 编译器仍然支持旧代码的旧形式。(如果他们符合 1989 年的 C 标准,他们就必须这样做。) 20 多年后留下的遗留代码不多,所以你不会经常找到这样的代码。
(请注意,这不是 . 的正确类型main
。我认为 Gcc 会对此发出警告,但您可能必须将警告设置调高。)