【发布时间】:2020-07-23 02:16:35
【问题描述】:
我熟悉 C++,最近决定学习 C。我正在学习的教程中经常写这样的 for 循环:
int i;
for (i = 0; i < 5; i++)
{
printf("%d", i);
}
您可以看到计数器 (i) 是在 for 循环体之外声明的。当用 C(和 C++)写它时,我写:
for (int i = 0; i < 5; i++)
{
printf("%d", i);
}
我对此进行了一些研究,似乎后者在 C89 中是非法的,并且仅在 C99 中引入。但是,我使用的教程是基于 C99 的,而且我还看到了很多现代 C 代码,其中计数器仍然在 for 循环体之外声明。
因此,我要问的问题是:在 C99 中的 for 循环体之外声明计数器有什么实际好处吗?换句话说,我应该怎么写?
注意:我看到有“类似的问题”,但他们中的大多数都在问为什么在某些代码中在 for 循环体之外声明计数器,而不是是否有任何好处。话虽如此,还有一个类似的问题是在询问好处,但它是在 C++ 中,我不确定这两种语言在这方面是否存在差异。
【问题讨论】:
-
这取决于,如果您需要稍后访问
i(在for块之后),那么您不能使用for (int i = ...,否则(恕我直言)我更喜欢在需要时声明变量。 -
我不会想太多。无论哪种方式都可以。如果循环结束后需要索引变量,则需要前一种方式。例如,一些循环可以提前中断,并且在循环之后使用索引来确定循环是完成还是提前结束。
-
前几天有一个非常相似的问题:stackoverflow.com/q/61059550/12139179