方法1的优点是文件大小略小,因为源代码中的文本字符较少:
int i, j;
for (i = 0; i < numRows; i++)
for (j = 0; j < numCols; j++)
//<some code here>
Run Code Online (Sandbox Code Playgroud)方法2的优点是局部变量的范围较小.
int i;
for (i = 0; i < numRows; i++)
{
int j;
for (j = 0; j < numCols; j++)
//<some code here>
}
Run Code Online (Sandbox Code Playgroud)即使在今天的现代计算机中优化的差异可以忽略不计,哪种方法被认为是"更好"的代码?
编辑以澄清此问题不重复:
这个问题是基于当前的C11标准,它不允许这样的语法:
for (int i = 0; i < numRows; i++)
Run Code Online (Sandbox Code Playgroud)
在C++和C99中,这种语法是完全可以接受的,而C11不允许在for语句中使用变量声明.
编辑以纠正错误信息:
我以为我正在使用C11,因为我最近从CodeBlocks下载了编译器,所以这就是为什么我说C11不允许声明中的变量声明for.但事实证明我实际上使用的是C90,这是我问题的根源.
对于纯粹的紧凑性和范围的限制,我会使用:
for (size_t i = 0; i < numRows; i++) {
for (size_t j = 0; j < numCols; j++) {
//<some code here>
}
}
Run Code Online (Sandbox Code Playgroud)
注意使用size_t似乎是数组索引的内容.的size_t类型是unsigned保证能够容纳任何数组索引整数类型.只是风格问题,但我还建议在所有循环体周围使用大括号.这使您不太可能通过不可避免的更新和更改来破坏代码.
通过习惯用这样的块作用域声明循环变量,你强迫自己选择使用存储在代码中其他地方的循环变量中的值.