gpt4 book ai didi

c - 在 C99 中的 for 循环体之外声明计数器有什么好处吗?

转载 作者:行者123 更新时间:2023-12-01 21:42:53 25 4
gpt4 key购买 nike

我熟悉 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++ 中,我不确定这两种语言在这方面是否存在差异。

最佳答案

for 语句之前声明循环计数器的主要好处是:

  • 可移植到 C99 之前的编译器,
  • for 循环结束后访问此变量。

如果在 for 语句之前定义,这个变量在循环之后仍然有效并且在范围内,如果通过 break 语句退出循环,这可能非常有用:

void foo(void) {
int i;
for (i = 0; i < 100; i++) {
if (bar(i))
break;
}
...
if (i != 100) {
printf("loop was exited after %d calls\n", i + 1);
}
}

缺点是您以后不能在相同范围内使用不同类型的另一个循环重用相同的标识符。

如果您不需要在 for 语句之后访问循环计数器,则在 for 语句的第一个子句中声明它可以提高可读性和可维护性。

相反,如果您需要可移植回 C99 之前的编译器,您应该避免 C99 特定的功能,例如这个。

关于c - 在 C99 中的 for 循环体之外声明计数器有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61138468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com