Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Однако каждое из UB введено в стандарт не просто так.Совершенно верно. UB введены для в язык не просто так, а для того, чтобы программы были переносимыми. И потому на программиста (а вовсе не на компилятор) налагается требование: UB в программе — не вызывать.
Какой смысл начинать делать оптимизации, если в первую очередь здесь не известно какой должен быть результат?Почему неизвестно? Известно: чтобы любая программа, которая не вызывает UB продолжана работать правильно.
Почему в принципе есть возможность успешно скомпилировать программу обращающуюся к неинициализированной переменной на чтение хоть с какими-то настройками компилятора?Потому что само по себе чтение не всегда является UB. UB появляется тогда, когда вы на основании значения этой переменной принимаете какое-то решение в программе.
Почему в принципе есть возможность успешно скомпилировать программу обращающуюся к неинициализированной переменной на чтение хоть с какими-то настройками компилятора?
int i;
if (some_runtime_dependent_condition()) {
cin >> i;
}
if (another_runtime_dependent_condition()) {
cout << i;
}
another_runtime_dependent_condition() равна true только когда some_runtime_dependent_condition() тоже равна true (это гарантируется, скажем, архитектурой).
Что каждый программист на C должен знать об Undefined Behavior. Часть 3/3