【问题标题】:Why declaring function arguments this way: void func(x) int x; {} [duplicate]为什么以这种方式声明函数参数:void func(x) int x; {} [复制]
【发布时间】:2019-10-30 05:32:21
【问题描述】:

我在查看 putchar.c 时偶然发现了这些行

我想知道为什么参数 ptrc 在参数正文之外声明? 这是某种“好方法”还是有实际用途?

int
_putchar_r (ptr, c)
     struct _reent *ptr;
     int c;
{
  return __sputc (c, _stdout_r (ptr));
}

【问题讨论】:

  • 这更像是一种“糟糕的旧方式”。请查看重复链接。

标签: c function parameters definition putchar


【解决方案1】:

这是一个带有标识符列表的函数定义。标识符列表中的每个标识符都在函数的复合语句之前声明。

因此,一个函数既可以使用参数类型列表定义,也可以使用带有标识符列表的旧样式。

【讨论】:

    【解决方案2】:

    这是经典C Programming Book中引入的K&R C风格

    【讨论】:

      【解决方案3】:

      确实,它是声明函数参数的“旧”方式。

      我有点喜欢它,因为它不断提醒我们,函数的所有参数都是仅存在于函数范围内的局部变量,并且传递给任何函数的任何参数始终是值副本。

      【讨论】:

      • 您不需要语法来提醒您 C 参数是按值传递的。并且使用旧式声明意味着如果您传递错误的参数数量和/或类型(即,它不允许编译时检查),编译器不会抱怨。 始终使用原型。
      • @Keith Thompson 我只说我喜欢它。这是我们在 80 年代早期编写 C 代码的方式……不,我不需要语法,但这是它的优点。与 C++ 中的指针与引用相同:我个人更喜欢指针语法,而不是引用语法;无论是否涉及任何间接,都没有丝毫疑问。但也许我只是变老了......
      • 那么我只是鼓励任何阅读本文的人不要效仿你的榜样。值传递是 C 语言基本语义的一部分,与函数声明或定义的语法无关。恕我直言,原型明显优于旧式声明和定义——这就是引入原型以及旧式声明和定义正式过时的原因。
      • 我也喜欢它——一些评论模式围绕着它长大。替换会导致较长的行在 80 个字符终端上的 vi 中难以导航。
      • @Keith Thompson 我只是说我喜欢旧语法。我绝对同意不要再使用它了;我自己不这样做,也没有任何时候鼓励任何人这样做。由于我已经提到的原因,了解旧语法可能对语言新手具有教育意义:它强调按值传递语义。
      猜你喜欢
      • 2012-08-21
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多