【问题标题】:Function definition C [duplicate]函数定义C [重复]
【发布时间】: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 相关

标签: c function


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,如果有些用户认为它是重复的,我很抱歉。在我的辩护中,我从来不知道 C 存在 K&R 样式语法,我一直看到 ANSI C,甚至程序互联网的语法类似于 ANSI C...所以我想到的第一件事就是书上的错字,我的问题是这怎么能仍然有效。谢谢。
  • @Kartik 无需道歉!看来这个问题将作为该问题的副本而被关闭,但这不应被视为侮辱。这并不意味着你问了一个不好的问题或任何东西。不知道 K&R 风格的存在也没关系;这就是我们来这里的目的!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 2017-01-27
    • 2019-04-14
    • 2017-07-07
    • 1970-01-01
    • 2021-01-30
    • 2015-04-10
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多