Opened 5 years ago

Closed 5 years ago

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

WW #1

Reported by: romanov.daniil Owned by: Vasily Alferov
Component: WW_make Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 5 years ago by Vasily Alferov

Owner: changed from Alferov to Vasily Alferov
Type: ожидается проверкаожидаются исправления

Не компилируется:

$ make
gcc -Wall -Wextra -Werror -Iinclude -c src/main.c -o bin/main.o
gcc -Wall -Wextra -Werror -Iinclude -c src/io.c -o bin/io.o
gcc -Wall -Wextra -Werror -Iinclude -c src/util.c -o bin/util.o
gcc -Wall -Wextra -Werror -Iinclude -c src/algorithm.c -o bin/algorithm.o
src/algorithm.c: In function ‘doComputation’:
src/algorithm.c:4:26: error: parameter ‘a’ set but not used [-Werror=unused-but-set-parameter]
 int doComputation(double a, double b) {
                   ~~~~~~~^
src/algorithm.c:4:36: error: parameter ‘b’ set but not used [-Werror=unused-but-set-parameter]
 int doComputation(double a, double b) {
                             ~~~~~~~^
cc1: all warnings being treated as errors
make: *** [Makefile:17: algorithm.o] Error 1

Про ошибки.

  • В multiple ошибка не имеет никакого отношения к тому, что подразумевалось. У тебя так:
    $ make
    gcc -Iinclude -c src/main.c -o bin/main.o
    src/main.c: In function ‘main’:
    src/main.c:6:11: error: void value not ignored as it ought to be
       int a = doComputation(5, 7.0);
               ^~~~~~~~~~~~~
    make: *** [Makefile:8: main.o] Error 1
    
  • В undefined нужна ошибка линковки, а не ворнинг компиляции. У тебя так:
    $ make
    mkdir bin
    gcc -Wall -Wextra -Werror -Iinclude -c src/main.c -o bin/main.o
    gcc -Wall -Wextra -Werror -Iinclude -c src/io.c -o bin/io.o
    gcc -Wall -Wextra -Werror -Iinclude -c src/util.c -o bin/util.o
    gcc -Wall -Wextra -Werror -Iinclude -c src/algorithm.c -o bin/algorithm.o
    src/algorithm.c: In function ‘doComputation’:
    src/algorithm.c:4:11: error: implicit declaration of function ‘max’ [-Werror=implicit-function-declaration]
       int c = max(3, 4);
               ^~~
    src/algorithm.c:3:26: error: parameter ‘a’ set but not used [-Werror=unused-but-set-parameter]
     int doComputation(double a, double b) {
                       ~~~~~~~^
    src/algorithm.c:3:36: error: parameter ‘b’ set but not used [-Werror=unused-but-set-parameter]
     int doComputation(double a, double b) {
                                 ~~~~~~~^
    cc1: all warnings being treated as errors
    make: *** [Makefile:17: algorithm.o] Error 1
    

Про Makefile. Он сделан с фантазией и с понимаем происходящего, но без понимания того, что хотелось в задании

  • Смысл цели clean — чистить _все_ артефакты сборки. В частности, lab1 тоже.
  • А вот all не должен зависеть от clean, объектные файлы после сборки удалять не надо. Представь, что у тебя проект на много тысяч файлов. Если ты изменишь один, то тебе нужно пересобрать только один объектный файл и перелинковать (линковка — очень быстрая операция по сравнению с компиляцией). А если ты объектные файлы удалил, то придётся их всех собирать заново. Это может занять десятки минут в больших проектах.
  • Цели объектных файлов названы неправильно: main.o → bin/main.o. Кроме того, они должны зависеть от bin (order-only зависимость, см. описание задание), а вот all не должен. Например, если тебе хочется собрать только один объектный файл командой make bin/io.o, у тебя не выйдет.
  • Объектные файлы должны зависеть от хедеров, поключённых в соответствующем исходном файле. Чтобы пересобирать их, когда меняются заголовки.

Про код.

  • Давай уже пользоваться include guards или pragma once, раз их уже рассказали.
  • Стиль: есть лишние отступы. Например, в algorithm.c почему-то выделены строчки 6-7. Кроме того, в разных файлах отступы в разное количество пробелов. Не надо так.
  • В max подразумевалось logDebug('m');
  • В файлах вида src/file.c, у которых есть заголовочный файл include/file.h, нужно первой строчкой подключать file.h. Это сделано для того, чтобы на этапе компиляции верифицировать, что в file.c написано то же самое, что ты обещал в file.h.

comment:2 Changed 5 years ago by romanov.daniil

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

Внес изменения

comment:3 Changed 5 years ago by Vasily Alferov

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

Здорово, гораздо лучше. Переделывать уже поздно, остановимся на оценке 0.9.

Единственное замечание, из-за него не 1: у тебя зависимость от src/file.c получилась order-only, так как все зависимости справа от палки по умолчанию order-only. Это не подразумевается: нужно, чтобы при изменении src/file.c пересобирался bin/file.o и вместе с ним, по цепной реакции, lab1.

Note: See TracTickets for help on using tickets.