10

可能重复:
C 函数语法,在参数列表之后声明的参数类型

我在“专家 C 编程”中看到了以下函数定义语法

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 时),任何人都可以对书中给出的内容有所了解。

4

2 回答 2

6

这个话题之前在这里讨论过,它是函数定义的“Kernighan and Ritchie 风格”。

如今,您应该更喜欢第二种语法,出于向后兼容性的原因,某些编译器仍然接受第一种语法,但出于所有实际目的,它应该被视为已弃用。

于 2012-05-26T14:06:26.623 回答
3

这是 ANSI 之前的语法,有时称为K&R C。它是 C 语言的原始语法。

于 2012-05-26T14:04:03.240 回答