【发布时间】:2017-02-18 04:51:17
【问题描述】:
-
方法 1 的优点是文件大小略小,因为源代码中的文本字符较少:
int i, j; for (i = 0; i < numRows; i++) for (j = 0; j < numCols; j++) //<some code here> -
方法2的优点是局部变量的范围更小。
int i; for (i = 0; i < numRows; i++) { int j; for (j = 0; j < numCols; j++) //<some code here> }
即使在当今的现代计算机中优化方面的差异可以忽略不计,哪种方法被认为是“更好”的代码?
编辑以澄清这个问题不是重复的:
这个问题是基于当前的 C11 标准,它不允许这样的语法:
for (int i = 0; i < numRows; i++)
在 C++ 和 C99 中,这种语法完全可以接受,而 C11 不允许在 for 语句中声明变量。
编辑以纠正错误信息:
我以为我在使用 C11,因为我最近从 CodeBlocks 下载了编译器,所以我说 C11 不允许在 for 语句中声明变量。但事实证明我实际上使用的是 C90,这是我问题的根源。
【问题讨论】:
-
@FridaySky: waddya 是什么意思?那些自 C99 以来一直在 C 中!
-
@FridaySky:如果那是 GCC 版本 4.x,那么它默认为
-std=gnu90模式,这意味着 GNU 对 C90 标准的扩展。如果您使用 5.x 或更高版本,则默认为-std=gnu11,这意味着 GNU 对 C11 标准的扩展。我冒昧地猜测您正在使用可能会产生该消息的 GCC 4.x。添加-std=c11或-std=gnu11(或-std=c99或-std=gnu99),它们会编译得很好。 C90 标准已经 17 多年没有更新了。 -
参数
DummyVariables正在命名一个不存在的文件。你之前错过了-o吗?您可以使用gcc --version检查 GCC 版本。你可以通过运行gcc -v …来了解它的真正作用。输出应包括版本信息 IIRC。
标签: c nested-loops