C语言中为什么定义变量时可以把相同类型的变量列在一起,而定义参数却不可以?

void print_time(int hour, minute)
{
    printf("%d:%d\n", hour, minute);
}

定义相同类型的参数这样会报错,C语言为什么要这样规定?

阅读 3.5k
2 个回答

因为多个变量声明是用 ; 分割的, 你可以很清楚的知道这是要声明4个变量.

int a, b;
char c, d;

你也可以分辨出下面是语法错误的.

int a, b;
c, d;

但是由于多个不同类型函数声明是用 , 分割的. 如果允许合并声明, 遇到如下情况, 你语法是没有问题的, 但此处的 isHourStartFromZero 明显应该是个 boolean 值. 此时由于人为失误少写了 boolean 类型声明, 但编译器却无法帮助我们判断出错误, 这会增加代码的错误率. 而这种错误本来是应该在编码阶段就由编译器静态检查出来的.

void print_time(int hour, minute, isHourStartFromZero)
{
    if (isHourStartFromZero) {
      printf("%d:%d\n", hour + 1, minute);
    } else {
      printf("%d:%d\n", hour, minute);
    }
}

应该是为了清晰地表示每一个参数的具体含义吧,防止混淆,以前还有一种写法:

int plus (a,b)
int a;
int b;
{
  return a+b;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进