【问题标题】:in c: func(void) vs. func() [duplicate]在 c 中:func(void) 与 func() [重复]
【发布时间】:2010-11-12 22:16:31
【问题描述】:

当 C 函数不接受任何参数时,语言规则是否必须使用“void”参数声明/定义它? 当参数列表中什么都没有时,PC-Lint 似乎有问题,我想知道它是否是我不知道的语言语法中的某些东西。

编辑:我刚刚发现了一个重复的(反向重复?它首先出现)问题,C void arguments,它有更多的答案和解释。

【问题讨论】:

    标签: c function void lint


    【解决方案1】:

    C 中的 IIRC func(void) 将声明一个不接受参数的函数,而 func() 声明一个接受任意数量参数的函数。我相信后者是来自 pre-ANSI C 的神器。

    根据Wikipedia here,声明 func() 基本上确实声明了“没有有关参数的信息”的函数。

    【讨论】:

    • 不是一个接受任意数量参数定义为 func(...) 的函数吗?
    • 您认为正确,在 K&R C 参数列表中定义不同(而且很差)。但是在 C++ 中 f() 和 f(void) 是一样的
    • @noamtm - func(a, b, ...) 形式的函数;声明了一个 C 函数,该函数接受一个变量参数列表,因此在某种意义上它也可以接受任意数量的参数。
    【解决方案2】:

    void 表示该函数不带任何参数。例如,

    int init (void)
    {
        return 1;
    }
    

    这和定义不一样

    int init ()
    {
        return 1;
    }
    

    因为在第二种情况下,编译器不会检查函数是否真的在没有参数的情况下被调用; 相反,将接受具有任意数量参数的函数调用,而不会发出任何警告(这仅是为了与旧式函数定义语法兼容而实现的,pre-ANSI)。

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多