В течение многих лет я привык не использовать значение итератора цикла 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
можно удалить, если я могу полагаться на значение я. Я думал, что из-за оптимизации компилятора нельзя полагаться на значение итератора цикла. Я просто вспоминаю фантомное учение? Или это стандарт (специально для GNU C )?