这个C
语法有什么用--使用'K&R‘风格的函数声明?
int func (p, p2)
void* p;
int p2;
{
return 0;
}
我能够在Visual Studios 2010beta中写下这篇文章
// yes, the arguments are flipped
void f()
{
void* v = 0;
func(5, v);
}
我不明白。这种语法的意义是什么?我可以写:
int func (p, p2)
int p2;
{
return 0;
}
// and write
int func (p, p2)
{
return 0;
}
它唯一指定的似乎是它使用了多少参数和返回类型。我想没有类型的参数是很酷的,但是为什么要允许它和函数声明符后的int paranName
呢?这很奇怪。
这仍然是标准的C语言吗?
发布于 2009-10-27 21:02:04
这是相当旧的K&R C语法(早于ANSI/ISO C)。现在,您不应该再使用它(因为您已经注意到它的主要缺点:编译器不会为您检查参数类型)。在您的示例中,参数类型实际上默认为int
。
当时使用的是这种语法,有时会发现下面的函数
foo(p, q)
{
return q + p;
}
这实际上是一个有效的定义,因为foo
、p
和q
的类型缺省为int
。
发布于 2009-10-27 21:01:45
这只是一个旧语法,早于您可能更熟悉的"ANSI C“语法。它通常被称为"K&R C“。
当然,编译器支持它是完整的,并且能够处理旧的代码库。
发布于 2009-10-27 21:08:27
这是1989年C语言标准化之前的原始K&R语法。C89引入了函数原型,借用了C++,并弃用了K&R语法。没有理由在新代码中使用它(并且有很多理由不使用它)。
https://stackoverflow.com/questions/1630631
复制相似问题