C中for语句中变量声明的差异
让我们假设它不仅在VisualStudio中,而且在C99、C11等中 在for语句中声明变量“i”有两种不同的方法C中for语句中变量声明的差异,c,for-loop,C,For Loop,让我们假设它不仅在VisualStudio中,而且在C99、C11等中 在for语句中声明变量“i”有两种不同的方法 1) int i; for(i = 0 ; i < index ; ++i) 2) for(int i = 0 ; i < index ; ++i) 1) int i; 对于(i=0;i
1)
int i;
for(i = 0 ; i < index ; ++i)
2)
for(int i = 0 ; i < index ; ++i)
1)
int i;
对于(i=0;i
两者的工作原理相同。但我认为他们之间会有一些不同。
你知道吗?
如果是,请告诉我
我只是想知道你的意见,以及它是如何运作的
对不起。对于答案,我知道“我”的范围是不同的
系统视图(我是指内存等)或编译器工作方式不同,或汇编代码不同,或类似的东西是否存在任何差异。唯一的区别是,在第一种情况下,变量
I
超出了的范围,因此您可以稍后使用它。在效率方面没有差别
如果只使用一次i
,那么第二种情况肯定更好:
for(int i = 0 ; i < index ; ++i)
for(int i=0;i
如果您有使用indexi
的循环,那么在所有循环之外声明它可能是有意义的
但一般来说,规则是限制变量的范围,因此第二种情况更好。限制变量的范围通常更安全
值得注意的是,第二种大小写语法仅适用于C99或更新的C11(不适用于旧的C89)。因此,如果在循环中声明变量,一些编译器会抱怨。例如,gcc
需要显式标志-std=c99
来允许这种语法。唯一的区别是,在第一种情况下,变量i
超出了的范围,因此您可以稍后使用它。在效率方面没有差别
如果只使用一次i
,那么第二种情况肯定更好:
for(int i = 0 ; i < index ; ++i)
for(int i=0;i
如果您有使用indexi
的循环,那么在所有循环之外声明它可能是有意义的
但一般来说,规则是限制变量的范围,因此第二种情况更好。限制变量的范围通常更安全
值得注意的是,第二种大小写语法仅适用于C99或更新的C11(不适用于旧的C89)。因此,如果在循环中声明变量,一些编译器会抱怨。例如,gcc
需要显式标志-std=c99
来允许该语法。的范围和生存期不同
在第二个示例中,它就在循环体内部。在第一种情况下,它超越了
除此之外,它们是相等的。i
的范围和寿命是不同的
在第二个示例中,它就在循环体内部。在第一种情况下,它超越了
除此之外,它们是相等的。在C99中,正确的方法是1)。它要求在使用前声明变量。看起来您的编译器支持多个标准,因此它对您使用的构造是透明的,并且它们都会导致相同的行为。在这种情况下,我个人的偏好是2),因为它减少了变量i的范围,也防止了使用单位值(风险较小)。在C99中,正确的方法是1)。它要求在使用前声明变量。看起来您的编译器支持多个标准,因此它对您使用的构造是透明的,并且它们都会导致相同的行为。在这种情况下,我个人的偏好是2),因为它减少了变量i的范围,也防止了使用单位化值(风险较小)。在for循环的初始化中声明一个新变量是C99扩展
C89要求在块的开头声明变量。
从语义上讲,在循环的初始化部分声明变量会将变量的作用域限制在循环的主体上
通常需要限制范围,以避免在for循环体执行后误用变量。例如,如果您正在执行一个简单的迭代,您可能不希望索引在For循环之后存在
没有正确的答案可以使用。问题是您希望您的作用域是什么,以及您希望支持什么编译器/语言版本。在for循环的初始化中声明一个新变量是一个C99扩展
C89要求在块的开头声明变量。
从语义上讲,在循环的初始化部分声明变量会将变量的作用域限制在循环的主体上
通常需要限制范围,以避免在for循环体执行后误用变量。例如,如果您正在执行一个简单的迭代,您可能不希望索引在For循环之后存在
没有正确的答案可以使用。问题是你希望你的作用域是什么,你打算支持什么编译器/语言版本。哦,我没有发现这个问题。我去查一下。谢谢。C++的帖子可能不是最好的副本,因为C++总是允许在循环内声明。在古老的C语言版本中,这是不允许的。哦,我没有发现这个问题。我去查一下。谢谢。C++的帖子可能不是最好的副本,因为C++总是允许在循环内声明。在C的古代版本中,这是不允许的。第一种情况的范围更大。但它如何减少变量的范围呢?我不明白。你能解释更多吗?“在这种情况下,我个人的偏好是1),因为它减少了变量i的范围,也防止了使用单位化值(风险较低)”呃?@SteveYonG在第二种情况下,i在循环后未声明。你不能在那里使用它。哦,谢谢你的评论,当然这是一个打字错误-我修正了我的答案。在案例1)变量I的范围是mo