【发布时间】:2012-05-26 14:00:10
【问题描述】:
可能重复:
C function syntax, parameter types declared after parameter list
我在“Expert C Programming”中看到了以下函数定义语法
int compare(s1, s2)
char * s1, *s2;
{
while (*s1++ == *s2) {
if (*s2++ == 0) return (0);
}
return (*--s1 - *s2);
}
上述定义如何有效?它可以完美地编译和运行,没有任何错误。
我更喜欢下面的函数定义语法
int compare(char * s1,char *s2)
{
while (*s1++ == *s2) {
if (*s2++ == 0) return (0);
}
return (*--s1 - *s2);
}
而且我没有在哪里看到书中给出的那个(在我的大学或其他地方学习 C 时),任何人都可以对书中给出的那个有所了解。
【问题讨论】:
-
这是函数声明的旧且已弃用的语法。有时称为“K&R 风格”。
-
这是一种旧风格,但仍然被语言所接受。顺便说一句:我不认为一本“专家 C 编程”的书应该包含
return (0); -
20 年前,无法处理 second 语法的编译器仍然很普遍。
-
编译器接受它并没有什么坏处。 (它与其他语法不冲突),所以仍然接受它是一个不错的选择。
-
@peoro 很抱歉,但在遇到这种语法后,我不确定这是书中的错字还是与旧式 C 相关