代码之家  ›  专栏  ›  技术社区  ›  noamtm

在c:func(void)vs.func()[重复]

  •  18
  • noamtm  · 技术社区  · 15 年前

    当C函数不接受任何参数时,是否必须用语言规则中的“void”参数声明/定义它? 当参数列表中没有任何内容时,pc lint似乎有问题,我想知道这是否是语言语法中我不知道的东西。

    编辑: 我刚找到一个副本(备份?首先是问题, C void arguments 有更多的答案和解释。

    2 回复  |  直到 15 年前
        1
  •  34
  •   dfa    15 年前

    void表示函数不接受任何参数。例如,

    int init (void)
    {
        return 1;
    }
    

    这与定义不同

    int init ()
    {
        return 1;
    }
    

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

        2
  •  7
  •   Timo Geusch    15 年前

    C中的IIRC func(void)将声明一个不带参数的函数,而func()则声明一个将带任意数量参数的函数。我相信后者是来自于前ANSI C的人工制品。

    根据 Wikipedia 在这里,声明func()基本上声明了函数“没有关于参数的信息”。