Opened 3 years ago

Closed 3 years ago

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

HW #1 (BMP) Panenkov

Reported by: Semyon Panenkov Owned by: Антон Филатов
Component: HW #1 (BMP) Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 3 years ago by Антон Филатов

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

не собирается

make
if [ ! -d "obj" ]; then mkdir obj; fi
gcc -Wall -Wextra -std=c11 -pedantic -Wno-gnu -Wmissing-prototypes -Wpointer-arith -Wshadow -Wcast-qual -Wstrict-prototypes -Wold-style-definition -Wno-unused-parameter -O0 -g -c src/bmp.c -o obj/bmp.o -I include/
In file included from src/bmp.c:1:0:
include/bmp.h:33:33: error: expected ‘,’ or ‘}’ before ‘__unused’
     BMP_ROT_COUNTERCLOCKWISE_90 __unused  = 2, // Not implemented
                                 ^~~~~~~~
src/bmp.c: In function ‘rotate_bmp’:
src/bmp.c:284:9: warning: case value ‘0’ not in enumerated type ‘bmp_rot_t {aka enum <anonymous>}’ [-Wswitch]
         case BMP_ROT_NONE:
         ^~~~
src/bmp.c:286:9: warning: case value ‘1’ not in enumerated type ‘bmp_rot_t {aka enum <anonymous>}’ [-Wswitch]
         case BMP_ROT_CLOCKWISE_90:
         ^~~~
src/bmp.c: At top level:
cc1: warning: unrecognized command line option ‘-Wno-gnu’
Makefile:13: recipe for target 'obj/bmp.o' failed
make: *** [obj/bmp.o] Error 1

Выпилил руками, но тесты почти все падают. Работают тесты с некорректными входными параметрами, а также тест с леной 0 0 512 512
На кажется, что ошибка пофиксится быстро. Вы второй из size-ов правильно считаете в заголовке, а первый - нет.

И везде ругается валгринд - течёте по памяти
Корректность: 4/20

Стиль:

  • а зачем вам "публичные" и "приватные структуры"? неужели использовать только BITMAPINFOHEADER и компанию в мэйне вам настолько не хотелось, что вы прям отдельные структуры завели только с "важными" данными?
  • проверьте, что вы не забыли const в аргументах функций, где значения не изменяются.

Стиль: 8/10

comment:2 Changed 3 years ago by Semyon Panenkov

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

Неожиданно, unused -- расширение компилятора CLang, а не GCC

И правда, я что-то совсем забыл про поле размера всего файла.

С памятью забавная ситуация: я при любых ошибках правильно чищу память, а при нормальном сценарии работы забыл почистить :) Я решил немножко расстроить Дейкстру и использовать goto для того, чтобы красиво обрабатывать ошибки и не забывать ничего удалять. Не хватает мне исключений и умных указателей. Сейчас всё тщательно проверил на линуксовом серваке.

По стилю. Да, я решил спрятать внутренности bmp, чтобы они наружу не торчали. А весь доступ осуществлять через методы и вспомогательные структуры. А ещё я хотел попробовать такую штуку. Помню, увидел это как-то в реализации SDL2 и мне понравилось. Инкапсуляция на C.

На const проверил, где надо добавил, ворнингов нет.

comment:3 Changed 3 years ago by Антон Филатов

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

Что-то у вас прям километр кода получился
А что вам мешало вместо goto функцию отдельную сделать?
На мой взгляд мы специально кодим на С, а не на ассемблере, чтобы ручного goto избегать. Кажется, что в вашем случае без него вполне можно было бы обойтись
Коррекстность: 20/20
Стиль: 9/10 (хоть убейте, но мне кажется, что без goto выглядело бы эстетичнее)
Бонус: 10/10

Note: See TracTickets for help on using tickets.