括号和花括号之间的变量

Bar*_*chs 4 c syntax function

我下载了一段C代码,它使用了这种定义函数的方式:

int somefunction(name1, name2) 
int name1;
int name2;
{
    // do stuff, using name1 and name2
}
Run Code Online (Sandbox Code Playgroud)

为什么或何时使用这种语法,它与括号内参数类型的更为人熟知的语法有何不同?

Jon*_*ler 6

这是用于定义函数的非常古老的预标准C语法 - 在Kernighan和Ritchie撰写"The C Programming Language"一书之后也称为K&R符号.C89/C90允许它是必要的 - 标准添加了函数声明的新原型形式,但是现有代码没有使用它(因为早在1989年,许多编译器都不支持并且编写的代码非常少) .您应该只找到代码中的符号,这些符号在20多年内未被修改,或者仍然声称需要支持预标准编译器(此类声明充其量是可疑的).

不要用它!如果你看到它,请仔细更新(仔细).

请注意,您还可以编写以下任何内容:

somefunction(name1, name2) 
{
    // do stuff, using name1 and name2
}

int somefunction(name1, name2) 
int name2;
int name1;
{
    // do stuff, using name1 and name2
}

int somefunction(name1, name2) 
int name1;
{
    // do stuff, using name1 and name2
}
Run Code Online (Sandbox Code Playgroud)

并且无疑也有其他变种.如果省略了返回类型,int则假设.如果省略参数类型,int则假定.右括号和左括号之间的类型规范不必与括号列表中的参数名称顺序相同; 列表中的顺序控制了参数的顺序.