Opened 5 years ago
Closed 4 years ago
#491 closed ожидаются исправления (задача сдана)
HW #1
Reported by: | gabitov.daniil | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | HW #1 (BMP) | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
В какой-то момент пришло осознание, что я неправильно понял задание - полетели лишние коммиты, i`m sorry
comment:4 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Корректность
- valgrind находит ошибки при работе с прямоугольными файлами;
- в заголовке не обновляется поле, хранящее размер файла.
Стиль
include/bmp.h
25: (fyi) аббревиатуры в составе имен чаше пишутся по правилам слов (DibHeader
);
32, 40: имена полей, имя функции почему-то с заглавных букв;
40: эта функция выглядит приватной для модуля обработки BMP; если так, то "экспортировать" ее не нужно (в bmp.c нужно пометить такую функцию как static).
src/main.c
замечания те же.
src/bmp.c
15, 16: разный стиль для имен констант. Чтобы не путать с переменными и макросами можно задавать имена в таком стиле: Constant_Name;
32, 60: дублирование нетривиальной логики, нужно вынести в фукнцию;
39, 40: (fyi) следующие изменение кода сделает его более плоским:
for (...) { assert(fread(...) ...); if (padding == 0) { continue; } fseek(...); }
40: успешность выполнения fseek
тоже надо проверять;
55: а если файл не удалось открыть?
64: нетривиальная обработка случая, когда выравнивание отсутствует, выглядит избыточной;
79: может лучше изображение построчно записывать, а не попиксельно?
108: отсутствует проверка успешного выделения памяти;
110: (fyi) увы, нет предела совершенству: индексы можно сделать типа size_t, скобки в некоторых аргументах memcpy избыточны, new_data лучше заменить на rotated(_image), data на original(_image), запись вида (data + row_i * w + col_i) кмк нагляднее показывает адресацию в "двумерном" массиве, от pixel_size и memcpy можно избавиться, заведя структуру BmpPixel
, кастить сырые данные к типу BmpPixel*
и копировать в цикле как *(rotated + ...) = *(original + ...), но это уже очень субъективные предпочтения, можно оставить как есть;
Баллы: корректность 16, стиль 6.5.
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Дедлайн пришел.
Корректность
Копирование работает (без обработки padding'ов при загрузке/сохранении) -> +2.
Стиль
include/bmp.h
bmp.c
;src/bmp.c
7: константа не используется;
12, 14: стиль именования переменных не совпадает (snake_case vs camelCase);
16: нужны отступы, т.к. продолжение statement'a со строки 15;
21: не проверяется удалось ли выделить память;
30: почему given_width не unsigned smth типа?
55: сомнительное решение. Кажется, что проще было бы обрабатывать padding при чтении/записи файла (т.е. представление изображения в памяти было бы без padding'ов), а не для каждой операции с картинкой;
65: слишком общее имя, судя по коду ниже, лучше pixel_offset/pixel_i(ndex);
73: еще элегантнее было бы использовать дистрибутивность и написать
3*width*(j+1)
; btw 3 лучше вынести в константу, а то слишком ее много в окрестностях; альтернатива - завести структуру pixel без выравнивания, хранить изображение как массив таких структур, при копировании элементов (типа struct pixel) пользоваться обычным присваиванием;79: обновляются не все поля заголовков, связанные с размером изображения.
src/main.c
16: s/*/assert(strcmp(action, "crop-rotate") == 0);
Баллы: корректность - 2; стиль - 4 (с учетом того, что код будет дописываться).