C中的特殊参数声明功能

时间:2011-04-09 20:56:22

标签: c parameters glibc

  

可能重复:
  C function syntax, parameter types declared after parameter list
  What is useful about this C syntax?
  Why are declarations put between func() and {}?

大家好,

我下载了glibc。我想从这个librairy中重用一些代码部分,但是在这段代码中有一些奇怪的东西。实际上,参数声明很奇怪。在que parantheses之后声明的参数的类型。我以前从未见过。什么是这种宣言?我无法编译它。

void
_ufc_doit_r(itr, __data, res)
     ufc_long itr, *res;
     struct crypt_data * __restrict __data;
{
/*CODE HERE */
}

2 个答案:

答案 0 :(得分:4)

这被称为“K& R”风格,来自Kernighan和Ritchie,他写了这本书The C Programming Language。在该书的第一版中,以上是 only 方式来声明参数类型。我相信第二版使用标准样式,括号内的类型和名称:

void
_ufc_doit_r(ufc_long itr,
            struct crypt_data * __restrict __data,
            ufc_long *res)
{
/*CODE HERE */
}

K& R样式是一种非常古老的声明参数样式,但有些人仍然使用它,因此他们的代码可以在非常旧的编译器上编译。

答案 1 :(得分:2)

这是声明参数的数据类型的旧样式。它的现代等价物是:

void
_ufc_doit_r(
     ufc_long itr,
     struct crypt_data * __restrict __data,
     ufc_long res
)
{
/*CODE HERE */
}