签名后带有变量的C函数声明

时间:2018-02-01 03:12:50

标签: c

我正在阅读make程序的源代码,我遇到了以下函数声明:

    struct dep *
    read_all_makefiles (makefiles)
    char **makefiles;
    { ... followed by function code ...

我们如何破译这个声明?

1 个答案:

答案 0 :(得分:2)

这是旧的K& R风格的函数参数声明,在ANSI / ISO标准C之前。这种风格现在已经过时,但仍然可以在一些非常古老的代码中找到。虽然它仍处于标准状态,但建议不再这样写。

要解密,只需将参数声明列表一个接一个地移回函数原型,并使用标识符匹配。

引用N1570草案,§6.9.1/ 13:

  

示例1

extern int max(int a, int b)
{
    return a > b ? a : b;
}
     

示例2

extern int max(a, b)
int a, b;
{
    return a > b ? a : b;
}

请参阅Alternative (K&R) C syntax for function declaration versus prototypes