Opened 5 years ago

Closed 5 years ago

#364 closed ожидается проверка (задача сдана)

WW#5

Reported by: Igor Engel Owned by: Sokolov Viacheslav
Component: WW_c_io Version: 1.0
Keywords: Cc:

Description

Вроде работает даже с отрицательными, но примеров бинарных файлов нет. Точно работает с отрицательными внутри фалов созданных ей самой.

Change History (10)

comment:1 Changed 5 years ago by Sokolov Viacheslav

 16 MAKE_CALLBACK(write_point_text) {
 17     point_node *p = get_point(node);
 18     FILE *f = (FILE*) data;
 19     fprintf(f, "%d %d\n", p->x, p->y);
 20 }

с моей точки зрения неудачное решение не передавать имена переменных. Из этого участка кода совершенно неочевидно, что node, data приходят снаружи, какие у них типы, в каком порядке они идут.
Я бы предпочел видеть что-то такое:

DEFINE_CALLBACK(write_point_text, node, data) {
...
}

а в .h , где не важны имена

DECLARE_CALLBACK(write_point_text);

объявление и определение бывает полезно разбивать.

22     list->head.next = list->head.next; //Workaround for unused parameter

это делается вот так

(void)list;

удобно сделать макрос

#define MAYBE_UNUSED(x) do{(void)(x);}while(false);

он такой, чтобы а) гарантированно ничего не делать, каким бы ни был x б) компилятор не мог это вырезать

not null все

"Unable to open input file" стоит вынести в именованную константу

Содержательно все в порядке.

comment:2 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

comment:3 Changed 5 years ago by Igor Engel

Type: ожидаются исправленияожидается проверка

Ок, колбэки поправил

Unused поправил

В своём коде вроде все non-null-assert'ы поставил, в предоставленный список надо их впихивать?

Вынести в константу не вышло, в макрос тоже. В обоих случаях при assertion-failed будет имя отображаться, а не строка

comment:4 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed

в предоставленный список надо их впихивать?

нет

comment:5 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: closedreopened

Забыл про следующий момент, который нужно поправить на допбалл:
fprintf / write может не получиться, если на файловой системе место кончилось.
Нужно как-нибудь специфицировать поведение программы в таком случае - как минимум сообщать об этом с помощью кода возврата. Для этого стоит либо поменять сигнатуру apply (протащить возможность рапортовать ошибку), либо использовать exit. Кроме того, стоит решить, что делать с частично записанными данными - либо оставить, как есть, либо удалить файл целиком, либо оставить только успешно записанные точки, но в любом случае поведение должно быть донесено до конечного пользователя утилиты либо комментарием в main, либо с помощью --help.

comment:6 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

comment:7 Changed 5 years ago by Igor Engel

Type: ожидаются исправленияожидается проверка

Вроде сделал.

comment:8 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

write возвращает size_t

The number of objects written successfully, which may be less than count if an error occurs.

comment:9 Changed 5 years ago by Igor Engel

Type: ожидаются исправленияожидается проверка

comment:10 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: reopenedclosed
Note: See TracTickets for help on using tickets.