Здравствуйте, Какая разница, Вы писали:
КР>Еще есть вариант посмотреть в сторону функции atexit
КР>
КР>Processes the specified function at exit.
КР>int atexit( void ( __cdecl *func )( void ) );
КР>
КР>Если открытые файлы хранить в каком то списке и иметь глобальный указатель на этот список то КР>имхо тогда легко в этой функцими произвести корректное закрытие всех открытых файлов
И такая мысль была. Пока отказался по причине простоты приложения.
Здравствуйте, _Storm, Вы писали:
_S>Я бы переписал это так (без goto)
_S>
_S>do
_S>{
...
_S>} while(false);
_S>
Я правильно понимаю, что do { ... } while( false ); добавлено типа для повышения читабельности?
Или какой такой смысл изводить goto в этом месте таким образом?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Я правильно понимаю, что do { ... } while( false ); добавлено типа для повышения читабельности? E>Или какой такой смысл изводить goto в этом месте таким образом?
Правильно, читабельности, а вследствие и уменьшения возможности допустить ошибку в cлучае goto т.к. метку можно случайно не в то место поставить, передвинуть, а вот со скобками уже тяжелее ошибиться, плюс нагляднее смотрится. Эту конструкцию do {...} while(false) уже где-то на рсдн обсуждали.
MBy wrote:
> Пишу на Си. Например, некая ф-ия не смогла что-то выполнить и вернула > ошибку. Продолжение выполнения программы стало безсмысленным. Как в > таком случае правильнее всего обработать эту ошибку и выйти из > программы?
exit() или abort(). abort() создаст core file, из которого ты можешь попытаться
узнать, что пошло не так.
> При том следует учесть, что необходимо закрыть n-ое > количество файлов и вернуть в кучу выделиную память, то есть сделать не > выброс а корректное завершение.
Все ресурсы будут закрыты за тебя операционной системой, кроме ресурсов с kernel
и filesystem persistency. Ресурсы с kernel persistency на linux: semaphore,
shared memory, message queue; с filesystem: файлы и тому подобное (named pipe,
device nodes, ...).