Я пытался привыкнуть к определению тривиальных переменных в той точке, в которой они нужны. Я был осторожен о написании кода, как это:Переменные определения в цикле
while (n < 10000) {
int x = foo();
[...]
}
Я знаю, что стандарт абсолютно ясно, что x
существует только внутри цикла, но это технически означает, что число будет выделяться и освобождаться в стеке с каждой итерацией? Я понимаю, что оптимизирующий компилятор вряд ли сделает это, но это гарантировано?
Например, он когда-либо лучше написать:
int x;
while (n < 10000) {
x = foo();
[...]
}
Я не имею в виду с этим кодом специально, но в любом виде петли, как это.
Я сделал быструю проверку с gcc 4.7.2 для простой петли, отличающейся таким образом, и была произведена одна и та же сборка, но мой вопрос в действительности состоит в том, что эти два, в соответствии со стандартом, идентичны?
Как вы сами говорите о первом цикле: «Я знаю, что стандарт абсолютно ясен, что x существует только внутри цикла», и, как и во втором примере, переменная 'x' может использоваться _after_ в цикле, которые могут быть двумя невозможно быть идентичным, или стандарт был бы двусмысленным. –
@JoachimPileborg: ну да, но в отношении цикла. – teppic
Если вы просто рассматриваете цикл и ничего больше, то да, они идентичны. –