LINUX.ORG.RU

Вопрос по системному вызову time()

 ,


0

1

Нужно ли проверять на корректность значение, возвращаемое системным вызовом time()?
В man 2 time написано:

On error, ((time_t) -1) is returned, and errno is set appropriately.

Что должно случится в системе, чтобы time() вернул некорректное значение? Насколько безопасно использовать код наподобии:

time_t t = time(NULL);
struct tm tm = *localtime(&t);

★★★

В том же мане написано:

ERRORS EFAULT t points outside your accessible address space.

dmitry_vk ★★★
()

Я бы assert воткнул. Вроде как ни на что не влияет, но всё же чудеса иногда бывают. Я такие странные вещи наблюдал когда у меня переполнение массива на куче было....

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

только не говори что ассерты нужны только в отладочных билдах

Ассерты нужны только в дебажных билдах. В этом и есть идея ассертов.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

по-твоему лучше чтобы оно непонятно что делало? Да, я за закрытие приложения пока оно не успело дел натворить. Заодно злые юзеры быстрее багрепорт напишут

true_admin ★★★★★
()
Ответ на: комментарий от andreyu

Чем, что аварийно положит приложение, навязчиво давая понять, что что-то пошло не совсем так как нужно.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Так и представляю себе браузер, который аварийно завершается при получении битого имиджа или хтмл. Вот радость для пользователя.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

thereshallbewings

Некорректное сравнение. Битая картинка в браузере - это предсказуемый вариант события, предусмотренное ветвление потока управления, а смысл ассертов как раз в том, чтобы отловить то, что ни в коем случае не должно произойти.

anonymous
()
Ответ на: комментарий от andreyu

Ассет ставится не на такие предсказуемые события, как битая картинка, а на невозможные условия (если в программе всё нормально). То есть типа asset(1 != 2), но более сложные и неразрешимые на этапе компиляции.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Потому что исполнение программы на системе, которая считает что 1 == 2 (как в моём примере) будет абсолютно непредсказуемо и может привести к опасным последствиям (например, порче пользовательских файлов).

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Потому что исполнение программы на системе, которая считает что 1 == 2 (как в моём примере) будет абсолютно непредсказуемо и может привести к опасным последствиям (например, порче пользовательских файлов).

А ассерт, положивший софтину вместе с дневной работой пользователя, позволит ему насладиться приятным вечером?
Ассерт в релизе не нужен. Он нужен на этапе разработки и тестирования. В остальных случаях с него толку, как с козла молока.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.