为什么我们必须分别指定每个正式参数的数据类型?

时间:2013-07-21 10:17:12

标签: c

如果我们可以声明多个这样的变量:

int i, j, k;

那么为什么我在写正式参数时会出错:

void fun(int i, j, k)

而不是:

void fun(int i, int j, int k) 

1 个答案:

答案 0 :(得分:15)

因为这不是C语法的工作原理。参数声明在几个方面与变量声明不同,例如

void fun(int i, double x);

VS

int i, double x;            // syntax error

虽然语法可以扩展为允许您尝试的表单(例如Go允许使用func fun(i, j, k int),但标准委员会决定不这样做,大概是因为它会让人感到困惑。面向旧式(“K& R”,1989年之前)的参数语法,为了向后兼容性,ANSI C89 / ISO C90仍然支持这种语法。

void fun(i, j)  // K&R syntax: implicitly int i, int j
{
}

void fun(i, p)
    int *p;     // int i implicit!
{
}

// What's this? double i? double *i? Mixed K&R/ANSI syntax with implicit int i?
void fun(double *x, i)
{
}