Здравствуйте, alpha21264, Вы писали:
Допустим, по каким-то очень важным причинам мы не можем настроить проект так, чтобы он был чист с точки зрения предупреждений компилятора и мы просто увидели, что ф-ция может проваливаться в ветку без return. Хотя это само по себе вызывает у меня вопросы к коду и людям, его поддерживающим.
Но вот дальше, я вот реально не понимаю, вот ТС и люди, солидарные с ним.
Вы действительно хотите, чтобы для такого кода:
bool ShouldBackup(int day) {
if (day % 2)
return false;
// ну забыли `return true`, с кем не бывает
}
void BackupOnEvenDay() {
if (ShouldBackup(dayOfYear())) {
backup();
}
}
, вместо того, чтобы программа упала с криком "чувак, ты налажал!", ф-ция ShouldBackup была просто тождественно равной false?
И потом отлаживаться сильно дальше, не понимая, какого хрена? Ясно, что в таком плоском примере всё очевидно, но обычно же оно сильно не так.
Неужели быстрая смерть, ровно один раз, с крайне простой диагностикой хуже, чем, программа, которая ведёт себя странно?
А если ф-ция возвращает int, на который сильно позже что-то делится? Один хрен будем иметь креш (вы же хотите, чтобы компилятор нолик втулил за вас), только не в том месте, где это элементарно диагностируется и чинится.
Вот если ваша программа открывает файл на чтение-запись там, где необходимо и достаточно только чтение, а потом кто-то починит права на файл и ваша программа свалится, вы тоже будете обвинять того, кто права починил?
Имхо, детерменированно нерабочая программа лучше, чем программа, только похожая на рабочую.