C函数声明中的无类型参数

Ala*_*air 5 c syntax types arguments function

最近我一直在查看Steven Skiena的"算法设计手册"的在线资源中的一些C示例代码,并且对他的一些函数调用的语法感到困惑.不可否认,自从C在uni工作已经有一段时间了,但我从来没有遇到像这样的无类型函数参数:

find_path(start,end,parents)
int start;
int end;
int parents[];
{
    if ((start == end) || (end == -1))
        printf("\n%d",start);
    else {
        find_path(starts,parents[end],parents);
        printf(" %d",end);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的语法吗?这种功能声明是否有任何好处?它似乎比传统的内联类型参数更冗长.

cni*_*tar 6

它们被称为K&R样式定义.不要在新代码中使用它们.甚至K和R也建议您在"The C Programming Language 2ed"中远离它们.

历史记录:ANSI C和早期版本之间的最大变化是如何声明和定义函数.

参数在括号之间命名,并且在打开左括号之前声明它们的类型; 未声明的参数被视为int.

函数原型的新语法使编译器更容易检测参数数量或类型中的错误.旧式的声明和定义仍然适用于ANSI C,至少在过渡期内,但我们强烈建议您在拥有支持它的编译器时使用新表单.