Opened 5 years ago
Closed 4 years ago
#371 closed ожидаются исправления (задача сдана)
WW #5
Reported by: | Surkov Petr | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_c_io | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (6)
comment:1 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
10 int result = bytes[0] + (1 << 8) * bytes[1] + (1 << 16) * bytes[2];
более явно (и производительнее)
10 int result = ((int)bytes[0]) | (((int)bytes[1]) << 8) | (((int)bytes[2]) << 16);
Нужно поправить на допбалл:
fprintf / fwrite может не получиться, если на файловой системе место кончилось.
Нужно как-нибудь специфицировать поведение программы в таком случае - как минимум сообщать об этом с помощью кода возврата. Для этого стоит либо поменять сигнатуру apply (протащить возможность рапортовать ошибку), либо использовать exit. Кроме того, стоит решить, что делать с частично записанными данными - либо оставить, как есть, либо удалить файл целиком, либо оставить только успешно записанные точки, но в любом случае поведение должно быть донесено до конечного пользователя утилиты либо комментарием в main, либо с помощью --help.
comment:4 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Сообщение об ошибки misleading: memory - это оперативная память. Место на диске - это disk space.
assert здесь ставить не стоит, потому что это вполне ожидаемое поведение (я бы сказал, более ожидаемое и важное, чем нехватка оперативной памяти). Assert-ы в первую очередь для проверки инвариантов, то есть для валидации того, что программа идет по ожидаемому пути исполнения (и непонятно, что делать в противном случае). Падение по assert-у - аварийное завершение программы. Здесь же понятно, что делать, если место кончилось - штатно завершить работу, проинформировать об этом пользователя. Аварийно завершаться просто незачем, штатное завершение реализуется не сложнее.
Как я уже писал выше, единственное спорное место - это поведение в случае возникновения такой ситуации (что делать с уже записанными данными).
comment:6 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Не собирется
Так вообще делать не стоит, потому что при release сборке (-DNDEBUG) вырежется важный код (все присваивание). В assert-ах не должно быть никаких модификаций чего-бы-то-ни-было.
не хватает зависимостей от заголовочных файлов
В остальном все хорошо, like за декомпозицию