括号和花括号之间的变量

时间:2014-10-01 14:14:37

标签: c function syntax

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

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

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

1 个答案:

答案 0 :(得分: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
}

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