3

我正在看这个页面,上面写着:

在 C++ 中,您几乎可以在程序中的任何位置声明变量。这不是 C 语言的情况。变量必须在函数的开头声明,并且必须在任何其他代码之前声明。这包括循环计数器变量,这意味着您不能这样做:

for(int i = 0; i < 200; i++) {

忘记您不能在任何地方声明变量是程序员从 C++ 迁移到 C 时出现“无法编译”问题的最常见原因之一。

我已经使用了一段时间的 Objective-C,因此使用了 C,并且我对诸如for(int i = 0; i < 200; i++) {但 Objective-C严格来说C 的声明没有任何问题,那么这个网页指的是什么?

4

1 回答 1

6

该网页对 C89 的描述不准确。

在 C89 中,您可以在任何块的顶部(不仅仅是在函数的开头)声明变量,但不能在块中的任何时间点声明变量。

在 C99 及更高版本中,您不必在块的开头声明变量。具体来说,C99 允许您编写:

for (int i = 0; i < max; i++)

如果您使用 GCC 但需要保持与 MSVC 的兼容性,那么您可以使用-Wdeclaration-after-statement来检测何时在语句之后声明变量(C89 不允许这样做)。

Objective C 大概使用 C99 而不是 C89 作为它扩展的标准,因此它允许在需要时声明变量。

于 2012-11-16T05:02:17.277 回答