哪个是为嵌套循环声明虚拟变量的更好方法?

Fri*_*Sky 2 c nested-loops

  1. 方法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. 方法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,这是我问题的根源.

ex *_*ilo 5

对于纯粹的紧凑性和范围的限制,我会使用:

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保证能够容纳任何数组索引整数类型.只是风格问题,但我还建议在所有循环体周围使用大括号.这使您不太可能通过不可避免的更新和更改来破坏代码.

通过习惯用这样的块作用域声明循环变量,你强迫自己选择使用存储在代码中其他地方的循环变量中的值.