【问题标题】:C variable declarations after function heading in definition [duplicate]定义中函数标题后的C变量声明[重复]
【发布时间】:2011-02-07 16:37:45
【问题描述】:

在阅读一些 FreeBSD 源代码时(参见:radix.h 第 158-173 行),我发现在定义中的“函数标题”之后的变量声明。

这在 ISO C (C99) 中有效吗?什么时候应该在生产代码中完成,而不仅仅是在“函数标题”中声明变量?为什么要在这里做?

我指的是函数标题,字符串看起来像这样:int someFunction(int i, int b) {

【问题讨论】:

  • 詹姆斯,你是对的。我在寻找答案时没有遇到这个问题。对不起!

标签: c variables freebsd c99 c89


【解决方案1】:

这看起来像 K&R (pre-ANSI) 风格。我认为它不是有效的 C99,但他们使用的是 C99 吗?乔尔

【讨论】:

  • C99 支持 K&R 风格的函数定义(它们已被弃用,但仍受支持)。
  • K&R 样式声明在 C99 中有效,但在 C99 中所有参数都必须显式声明,而在 K&R(和 C89/90)中,int 参数可以不声明。
  • @James McNellis:有趣 - 我曾认为 K&R 风格的函数定义支持也已从 C99 中删除。我不知道为什么......
  • C in a Nutshell 说:“这种表示法......已被弃用,尽管编译器仍然支持它。在新的 C 源代码中,函数定义仅使用原型表示法......”(第 98 页,第一版,2005 年)如果是“伯克利风格”,那么他们可能不会更改编译器以与他们的风格相矛盾。
【解决方案2】:

我认为您指的是在 C 中声明参数的“老式”pre-ANSI 方式。它看起来像这样:

int foo(a, b)
    int a,
    int b
{
    /* ... */
}

这在 C99 中可能仍然有效,并且出于向后兼容性的原因将被编译器接受,但它应该被视为已弃用/过时。

【讨论】:

    【解决方案3】:

    呃。也许我误解了你的问题,但是那个 sn-p 中的 ib 是函数的参数。这不是在函数中声明变量的简洁方式,例如:

    int someFunction() {
        int i, b;
    

    当您调用 someFunction 时,您会将这些参数传递给它:

    someFunction(1, 2); // `i` will be `1` and `b` `2` within `someFunction`
    

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2020-01-15
      相关资源
      最近更新 更多