我一直在努力养成在需要时定义琐碎变量的习惯。我一直谨慎地编写这样的代码:
while (n < 10000) {
int x = foo();
[...]
}
我知道标准非常明确,x
只存在于循环内部,但这是否意味着整数在每次迭代时都将在堆栈上分配和释放?我意识到优化编译器不太可能这样做,但这是有保证的吗?
例如,写成这样是否更好:
int x;
while (n < 10000) {
x = foo();
[...]
}
我并不是指这段代码,而是任何类似的循环。
我用gcc 4.7.2做了一个简单的测试,测试中有一个与这个不同的循环,但是生成了相同的汇编代码。我的问题是,按照标准,这两个循环是否相同?
x
在循环之后可用,这两个示例不可能相同,否则标准将是模棱两可的。 - Some programmer dude