История изменений
Исправление hateyoufeel, (текущая версия) :
Это не «без условий» а «без тела», хотя и условий у него конечно тоже нет.
Вообще, там написано «бесконечный цикл без побочных эффектов». То есть вот такой код тоже UB:
void f(void) {
unsigned i = 0;
for(;;) {
i++;
if(false)
break;
}
}
И вот это уже страшнее, потому что такой код, несмотря на его бредовость, вполне может возникнуть во время рефакторинга каким-то боком и вместо ошибки логики ты можешь получить вообще хз что. if(false)
можешь заменить на вызов какой-нибудь функции, которую компилятор заменит на false ради лулзов, статически её вычислив.
UB - это ситуация «нельзя полагаться на результат компилирования данного кода».
Не совсем. UB – это ситуация, когда нельзя полагаться на результат компиляции всего модуля. А не только проблемного куска.
Исправление hateyoufeel, :
Это не «без условий» а «без тела», хотя и условий у него конечно тоже нет.
Вообще, там написано «бесконечный цикл без побочных эффектов». То есть вот такой код тоже UB:
void f(void) {
unsigned i = 0;
for(;;) {
i++;
if(false)
break;
}
}
И вот это уже страшнее, потому что такой код, несмотря на его бредовость, вполне может возникнуть во время рефакторинга каким-то боком и вместо ошибки логики ты можешь получить вообще хз что.
UB - это ситуация «нельзя полагаться на результат компилирования данного кода».
Не совсем. UB – это ситуация, когда нельзя полагаться на результат компиляции всего модуля. А не только проблемного куска.
Исходная версия hateyoufeel, :
Это не «без условий» а «без тела», хотя и условий у него конечно тоже нет.
Вообще, там написано «бесконечный цикл без побочных эффектов». То есть вот такой код тоже UB:
void f(void) {
unsigned i = 0;
for(;;) {
i++;
}
}
UB - это ситуация «нельзя полагаться на результат компилирования данного кода».
Не совсем. UB – это ситуация, когда нельзя полагаться на результат компиляции всего модуля. А не только проблемного куска.