奇怪的C语法是什么?

时间:2010-12-07 19:08:04

标签: c syntax

  

可能重复:
  C variable declarations after function heading in definition
  What is useful about this C syntax?

我试图理解一些C代码并遇到了这个函数的头部和第一个支撑之间声明变量的地方。

知道这些变量是什么吗? 他们是本地的还是全球的?

作者打算在这做什么?

void someFunction (m_ptr, n_ptr, params, err)
            integer  *m_ptr;        /* pointer to number of points to fit */
            integer  *n_ptr;        /* pointer to number of parameters */
            doublereal *params;     /* vector of parameters */
            doublereal *err;        /* vector of error from data */
        {
            //some variables declared here
            int       i;
            ...
            ...

            //body of the function here

        }

3 个答案:

答案 0 :(得分:7)

它们是函数参数。这是声明它们的另一种方法。它们的工作方式与普通参数相同。

对于一个相当长但信息量很大的解释,请参阅Alternative (K&R) C syntax for function declaration versus prototypes

答案 1 :(得分:3)

这些变量是参数的声明。不知道为什么有人再使用这种风格。那些类型必须是typedef。

如果这是旧的遗留代码,那么当时作为关键字真的存在吗?

答案 2 :(得分:2)

这是一个K& R风格的声明,它是30年前写的C(它仍然受支持,但在C99中被弃用;我相信它将在C1x中被删除)。从类型的外观来看,代码可能是从Fortran转换而来的,所以谁知道原始版本有多久了。

然而,由于void的存在,原始K& R并不严格。

在“现代”C中,它看起来像:

void someFunction (integer *m_ptr, integer *n_ptr,
                   doublereal *params, doublereal *err)
{
    //some variables declared here
    int       i;
    ...
    ...

    //body of the function here
}