LINUX.ORG.RU

История изменений

Исправление pftBest, (текущая версия) :

Не все так просто, в общем случае компилятор не может доказать будет цикл бесконечным или нет. Просто заменить явные бесконечные циклы можно, но это не решит все проблемы.

Например код:

int main() {
    unsigned number = 0;
    for (;;) {
        if (is_magic(number))
            break;
        number++;
    }
#ifdef SOME_SHIT
    printf("%u\n", number);
#endif
    return 0;
}

Можешь вместо ifdef представить что там if(0) который получился после других оптимизаций.

Компилятор не может доказать существует ли волшебное число, и следовательно не знает бесконечный это цикл или нет. Но он видит что результат работы этого цикла никто не использует. Стандарт С++ позволят удалить этот цикл и не делать бесполезное вычисление. Но в других языках придется считать, даже если это не нужно.

Исходная версия pftBest, :

Не все так просто, в общем случае компилятор не может доказать будет цикл бесконечным или нет. Просто заменить явные бесконечные циклы можно, но это не решит все проблемы.

Например код:

int main() {
    unsigned number = 0;
    for (;;) {
        if (is_magic(number))
            break;
        number++;
    }
#ifdef SOME_SHIT
    printf("%u\n", number);
#endif
    return 0;
}

Можешь всесто ifdef представить что там if(0) который получился после других оптимизаций.

Компилятор не может доказать существует ли волшебное число, и следовательно не знает бесконечный это цикл или нет. Но он видит что результат работы этого цикла никто не использует. Стандарт С++ позволят удалить этот цикл и не делать бесполезное вычисление. Но в других языках придется считать, даже если это не нужно.