В течение многих лет я привык к тому, что не использовал значение тега цикла for
после выхода цикла. Я мог бы поклясться, что я это сделал, потому что он использовал для создания предупреждения о компиляторе, но после того, как мне бросили вызов в недавнем обзоре кода, я оказался ошибочным.
Например, я всегда это делал (ПРИМЕЧАНИЕ: наши стандарты кода запрещают использование ключевого слова "break" ):
int i, result;
bool done = false;
for (i=0; i<10 && !done; i++) {
if (some_condition) {
result = i;
done = true;
}
}
// Value of i may be undefined here
Теперь, очевидно, переменная result
может быть удалена, если я могу положиться на значение i. Я думал, что из-за оптимизации компилятора вы не можете полагаться на значение итератора цикла. Я просто помню обучение phantom? Или это стандарт (в частности, относительно GNU C)?