在我当前的项目中,我偶然发现了一个奇怪的现象,其中嵌套的for循环只会执行一次内循环,然后停止。即使仔细检查了所有涉及的变量,外部for循环仍然没有正当理由终止。唯一让这个结构与我的程序中包含的其他for循环不同的事实是,counter变量作为参数传递给包含循环的函数,并且从不复制到任何地方。For循环功能参数在C++中的奇怪
所以决定测试,如果该问题可被再现:
#include <stdio.h>
void someFunction(int x, int y, int width, int length)
{
int endX = x+width;
int endY = y+length;
printf("x will not exceed: %i\n", endX);
printf("y will not exceed: %i\n", endY);
for(; x < endX; x++)
{
for(; y < endY; y++)
{
printf("(%i, %i)\n", x, y);
}
}
}
int main(int argc, const char *argv[])
{
someFunction(1, 1, 5, 5);
return 0;
}
在执行时,但是,应用程序的输出从直观厚望不同:
x will not exceed: 6
y will not exceed: 6
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(1, 5)
的行为是类似的,当x和y被切换,但y变量永远不会增加。通过简单地声明一个新变量作为每个循环的计数器即可解决问题。
但为什么会发生这种情况?是否因特定原因而被禁止?编译器是否会禁用某些参数的修改,如果是这样,为什么它只与一个变量一起工作,而不是另一个变量?
提供的源代码是用GCC/G ++ 4.5.3编译的,没有任何特殊的优化标志。
嗯,这是很简单的。现在猜猜这是我的就寝时间。 – 2012-08-08 18:26:07