pavel_turbin wrote:
>
> Pzz>Разве тот факт, что на диске кончилось место, может считаться
> Pzz>уважительной причиной упасть по assert'у?
>
> естественно, если вы обрабатываете специальным образом ошибку из close,
> например, повторяете вызов через несколько секунд, то assert не нужен.
К сожалению, close(), это навсегда. Даже если Вы получили -1, дескриптор
уже закрыт.
> НО если вы просто игнорируете его код возврата:
>
> int myfunction()
> {
> int fh = open(...);
> if( fh < 0 )
> return -1;
>
> read(...);
>
> close(fh); // часто можно видет такой код
> return 0;
> }
Можно еще сознательно игнорировать результат close(). Например, если я
закрываю временный файл, который уже отслужил свое, зачем мне знать код
возврата? Сделать-то с ним ничего осмысленного я все равно не смогу...
Кстати, и в приведенном Вами примере, ну какая Вам разница, чем кончился
close, если Вы прочли то, что собирались? Если он кончился чем-то не
тем, это (в данном случае, не вообще!) уже проблема системы, а не Ваша.
> Еще один момент, я обычно сохраняю assert-ы в релизе. Они пишут в
> error-log, тогда можно было отследить ошибки и в release.
Я тоже сохраняю. Но еще раз, assert это для _внутренних_ ошибок в
программе. Внешние ошибки 1) должны обрабатываться, кроме тех случаев,
когда факт возможной ошибки _сознательно_ игнорируется 2) должны
обрабатываться по-другому, чем внутренние.
Posted via RSDN NNTP Server 2.0