我能简单地写代码吗?
for (int i = 0; ...
替代
int i;
for (i = 0; ...
在C或C++中?
(而且变量i
只能在循环内部可访问吗?)
我能简单地写代码吗?
for (int i = 0; ...
替代
int i;
for (i = 0; ...
在C或C++中?
(而且变量i
只能在循环内部可访问吗?)
这在C++中是合法的。
在原始版本的C语言中它是不合法的。
但在C99中被采用为C的一部分(当时一些C++特性被回传到C语言中)
使用gcc编译器
gcc -std=c99 <file>.c
变量在for循环语句内以及被循环的语句中是有效的。如果这是一个块语句,则变量在整个块中都有效。for(int loop = 0; loop < 10; ++loop)
{
// loop valid in here aswell
}
// loop NOT valid here.
是的,在C++和C99中都是合法的。
在C99或C++中这样做是完全合法的:
for( int i=0; i<max; ++i )
{
//some code
}
它的 while
等价于:
{
int i=0
while( i<max )
{
//some code
++i;
}
}
for
循环和while
循环并不完全等价。如果“某些代码”包含一个continue
语句,就需要考虑发生了什么。 - jamesdlini
的范围。你可以始终确保在调用 continue
之前有一个 ++i
,但除此之外,你提出了一个有效的观点。 - rubenvbfor(int i=0;i<somevalue;i++)
一直被视为定义for循环的首选方式。int i = 10;
i = 10 + PI;
当你进入 for 循环并声明 i=0 时,这个值会自动更改。
我可以写简单的代码吗?
可以。
(而变量i只能在循环内部访问吗?)
取决于编译器及其版本。据我所知,现代编译器只允许在循环内部访问i。一些旧的编译器也允许在循环外部访问i。一些编译器允许在循环外部访问i,并警告您存在非标准行为。
我认为(但并不确定)在VC98(Visual Studio 6)中使用了“循环外的i”(还有一个全局定义的“i”变量,可能会导致极其有趣的行为)。我认为,在2000年到2003年左右,(微软)编译器开始为外部访问i打印“使用了非标准扩展”,最终这个功能完全消失了。在visual studio 2008中已经不存在该功能。
这可能是按照标准发生的,但我目前无法提供链接或引用。
int i = 0;
for(int e = 0; e < 10; e++)
{
i = e;
}
现在,i
的值每次都会改变。