变量的声明和赋值在 K&R 的不同行上是有原因的吗?
Is there a reason why declarations and assignments of variables are on different lines in K&R?
我开始阅读 The C Programming Language,我注意到变量的声明和赋值在不同的行上。例如,从第 16 页开始:
int c;
c = getchar();
有没有写int c = getchar();
的原因(一般来说,为什么assignment和declaration不在同一行)?当我 运行 而不是前者时,它似乎工作正常。
在 C 中,您曾经只能在块的开头声明变量(紧接在 {
之后)。这是因为编译器技术还不能胜任任意定位变量声明的任务。
我敢肯定,最初你不能在早期用函数调用来初始化变量,但是到写 K&R 的时候已经没有了。但是旧习惯在需要很久之后仍然存在,所以就是这样。
在 C '99 和更新版本中,变量声明可以出现在语句可以出现的任何地方,也可以出现在 for
循环的初始化步骤中。
C 编程语言的原始版本不支持较新的语法。本书后来的版本增加了一些新的语法,但是自上一版以来已经有了新的 C 版本,所以即使在上一版中也没有全部出现。
如果您正在阅读本书的第二版,第 86 页会提到它。
In effect, initializations of automatic variables are just shorthand for assignment statements. Which form to prefer is largely a matter of taste. We have generally used explicit assignments, because initializers in declarations are harder to see and further away from the point of use.
我开始阅读 The C Programming Language,我注意到变量的声明和赋值在不同的行上。例如,从第 16 页开始:
int c;
c = getchar();
有没有写int c = getchar();
的原因(一般来说,为什么assignment和declaration不在同一行)?当我 运行 而不是前者时,它似乎工作正常。
在 C 中,您曾经只能在块的开头声明变量(紧接在 {
之后)。这是因为编译器技术还不能胜任任意定位变量声明的任务。
我敢肯定,最初你不能在早期用函数调用来初始化变量,但是到写 K&R 的时候已经没有了。但是旧习惯在需要很久之后仍然存在,所以就是这样。
在 C '99 和更新版本中,变量声明可以出现在语句可以出现的任何地方,也可以出现在 for
循环的初始化步骤中。
C 编程语言的原始版本不支持较新的语法。本书后来的版本增加了一些新的语法,但是自上一版以来已经有了新的 C 版本,所以即使在上一版中也没有全部出现。
如果您正在阅读本书的第二版,第 86 页会提到它。
In effect, initializations of automatic variables are just shorthand for assignment statements. Which form to prefer is largely a matter of taste. We have generally used explicit assignments, because initializers in declarations are harder to see and further away from the point of use.