Использование & #39;для& #39; итератор цикла после того, как цикл существует в C

В течение многих лет я привык не использовать значение итератора цикла 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 )?

10
задан Peter Mortensen 17 April 2017 в 13:09
поделиться