Opened 5 years ago
Closed 5 years ago
#112 closed ожидается проверка (задача сдана)
WW #2
Reported by: | Surkov Petr | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_strings | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (5)
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: | ожидается проверка → ожидаются исправления |
---|
Все еще повторный запуск make приводит к перекомпоновке lab2, даже если в этом нет необходимости.
Все еще стоит добавить проверку предусловий (соблюдение контрактов) в функции. В данном случае явно предполагается, что на вход передаются ненулевые указатели.
В тесты стоит добавить проверку корректности возвращаемого значения для функций my_*.
Хотелось бы больше тестов для крайних случаев (в данном случае - пустых строк).
Чем мотивировано использование calloc?
Напоминаю про отличие void()
от void(void)
comment:4 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 5 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Не проверяется, что my_strcmp корректно вернет отрицательное значение;
не проверяется, что указатель совпадает с первым аргументом в соответствии со Стандартом
Для цели lab_02 зависимость obj можно вообще не указывать, а если указывать - то как order-only зависимость. Сейчас же повторный запуск make приводит к перекомпоновке lab2, даже если в этом нет необходимости.
Также лучше согласовать название цели и имя выходного файла.
hint: в стандартных linux утилитах флаги зачастую можно передавать вместе, например,
rm -rf
. Выгода: экономия двух символов; все флаги описаны в одном месте.Сейчас в реализации есть undefined behaviour. https://en.cppreference.com/w/c/language/restrict
Стоит добавить проверку предусловий (соблюдение контрактов) в функции.
В некоторых местах реализации можно немного упростить, например, проверка
&& *s2
в my_strcmp избыточна - ее удаление не влияет на корректность программы.Желательно не экономить на названиях. s, s1, s2 - это ОК в контексте абстрактных имен для однотипных функций по работе над строками. А вот t - уже непонятно. Можно именовать result, читаемость от этого улучшится. А еще лучше -
char * const result
.Обращаю внимание, что malloc может вернуть NULL (формально влияет на корректность программы).
Рекомендую запустить тесты с address sanitizer.