Opened 5 years ago
Last modified 4 years ago
#430 assigned ожидается проверка
WW #1
Reported by: | andreev.nikita | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_make | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (4)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
svn commit и svn up не загружает изменения почему-то... не проверяйте пока
Note: See
TracTickets for help on using
tickets.
multiple definition - у меня воспроизводится
unresolved symbol / undefined reference - не увидел. Это проблема этапа компоновки (линковки).
Здесь другая проблема, на этапе компиляции: в main.c "вызывается" необъявленная ранее функция (она не приходит с зависимостями .h). Компилятор считает это декларацией функции, и сообщает, что декларация эта выглядит странно.
Суть же ошибки в том, что для какой-то декларации (объявления) не предоставлена реализация (definition). То есть обещали какую-то функцию, но обещание не сдержали.
correct: проект собирается и повторный запуск make не приводит к пересборке, это главное.
Makefile:
цель bin/test.o стоит удалить, потому что рецепт не может быть выполнен - нет test.c
зависимости от заголовочных файлов, order-only зависимости - здесь все верно
не хватает цели
all: lab_01
цели, не соответствующие файлам на диске, стоит пометить как
.PHONY:
в противном случае создание файла clean рядом с Makefile приведет к тому, что make clean не будет работать
цель clean реализована не вполне корректно, потому что если сборка не удалась (например, вообще не производилась), make clean завершится с ошибкой:
стоит либо использовать rm -rf, либо сделать проверку наличия директории bin / файла lab_01 (здесь поможет функциональность bash)
Почему-то все файлы помечены исполняемыми (набор прав
-rwxr-xr-x
):Хотя достаточно набора прав
-rw-r--r--
Код:
лучше не смешивать пробелы и табуляции в рамках одного проекта, с кодом становится неудобно работать
doComputation(5, 7.0)
здесь происходит вызов функции int doComputation(int a, int b), но аргументы передаются типов (int, double). Это не очень хорошая мысль, обычно это источник ошибок. Лучше максимально педантично следить за корректностью типов. В языке Си это сложнее, в Си++ в некотором смысле проще.