2012-05-26 80 views
10

可能重复:
C function syntax, parameter types declared after parameter list函数定义Ç

我看到函数定义如下语法 “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); 
} 

,并没有在那里我看到在书中给出了一个(在研究下,在我的大学或其他地方),任何人都可以请扔在书中给出的一些光。

+5

这是旧的和不推荐使用的函数声明语法。有时称为“K&R风格”。 – cnicutar

+3

这是一种古老的风格,但仍然被语言所接受。顺便说一句:我认为20年前“专家C编程”书不应该包含“return(0);' – wildplasser

+0

”,但仍然不能处理* second *语法的编译器。 – Amadan

回答

6

这个话题之前已经讨论过here,它是函数定义的“Kernighan和Ritchie风格”。

现在您应该更喜欢第二种语法,出于向下兼容性的原因,第一种语法仍然被某些编译器接受,但出于所有实际目的,应该将其视为弃用

+1

感谢您的回答,如果有些用户认为它是重复的,我很抱歉。在我的防守中,我从来不知道C语言存在K&R风格的语法,我总是看到ANSI C,即使互联网上的程序也有语法类似于ANSI C ...因此,我脑中出现的第一件事是书本错字,而我的问题实际上是如何继续工作。谢谢。 –

+1

@Kartik无需道歉!看起来这个问题将作为该问题的重复来解决,但这不应该被视为侮辱。这并不意味着你问了一个糟糕的问题或任何事情。不知道K&R风格的存在是可以的;这就是我们在这里! –

+0

@CodyGray谢谢 –

3

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