【问题标题】:Best practice to declaring counter variables in nested for loops in C99在 C99 的嵌套 for 循环中声明计数器变量的最佳实践
【发布时间】:2017-10-03 11:08:54
【问题描述】:

我问的是这两种实现之间的最佳实践:

for ( int i = 0; i < 5; i++ )
    for ( int j = 0; j < 5; j++ )
        ...some code here...

...other code...

for ( int i = 0; i < 5; i++ )
    for ( int j = 0; j < 5; j++ )
        ...some code here...

或者这个:

beginning of function/main
int i,j;

...some code...

for ( i = 0; i < 5; i++ )
    for ( j = 0; j < 5; j++ )
        ...some code here...

...other code...

for ( i = 0; i < 5; i++ )
    for ( j = 0; j < 5; j++ )
        ...some code here...

换句话说是不是更好:

  1. 一次性声明计数器循环并在每个循环中定义它们
  2. 还是每次都声明?

谢谢

编辑: 我的问题是: 对 2 个变量执行 N 个声明(和定义)更好还是 2 个声明和 N 个定义更好?

编辑2: 好的,现在我明白了。我不知道声明只影响编译而不影响执行(我看到了 C99 编译源文件的汇编语言)。所以没有区别,Lundin 的回答显示了使用的标准。

【问题讨论】:

  • IMO 变量应声明为最接近其预期用途。您会惊讶于这两种样式生成的代码有多么不同。哪个更好纯属见仁见智。
  • OT:所谓的“声明”变量,实际上是定义它。您所说的“定义”实际上是初始化分配给变量。
  • @StoryTeller:我认为这是事实,而不是意见。还是“在我的教条意见中”? ;-)
  • @Bathsheba - 生成的代码是事实 :) 我在午餐时与我公司的资深程序员进行了许多讨论,非常固执己见(男孩,我听到了为什么 C90 方式更好...)。
  • 投票重新开放。与不使用任何换行符的情况下编写 C 代码相比,这不再是基于意见的了。

标签: c for-loop declaration c99 definition


【解决方案1】:

这实际上不是基于意见的,但存在一个广泛认可的行业标准:

尽可能缩小局部变量的作用域。

这正是 C++ 和 C99 允许在循环内部声明迭代器的原因。这意味着第一个版本更好,句号。

然而,如果您需要在循环结束后知道迭代器的值,或者如果您需要 C90 向后兼容,则必须使用第二个版本。

【讨论】:

  • 只有在迭代器(for循环)中才应该被允许。像printf("a");printf("b"); int c = 10; printf("%d", c); 这样的代码很难看。
  • @tilz0R 是的,你应该在前两种情况下使用puts()。 :D
  • @tilz0R - 我完全同意。您绝对不应该将所有内容写在一行中。
  • @StoryTeller 这是傻瓜和聪明人之间的一条细线。 #justsayin
  • @tilz0R - 理解讽刺和不理解之间也有一条很粗的界线
【解决方案2】:

始终保持变量的范围尽可能小。

您的第二个选项将ij 不必要地泄漏到周围的范围内,因此不是首选。

【讨论】:

  • 泄露了?什么?
  • @tilz0R:泄漏 = 最终到达他们不应该出现的地方。为免生疑问,我们不是在这里谈论内存泄漏!
  • 通常这被称为“命名空间污染”。
  • @Lundin:在 C++ 中,命名空间污染是完全不同的事情。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
相关资源
最近更新 更多