Вычисление корней квадратного уравнения: как исправить ошибку? - C (СИ)
Формулировка задачи:
вот ошибка:
$ gcc main.c -o main
/tmp/ccl2U91G.o: In function `main':
main.c.text+0xc8): undefined reference to `rootsearch'
collect2: error: ld returned 1 exit status
старался писать хороший код(с комментариями и т.д.), буду рад критике.
пробовал гуглить ошибку, ничего не нашел.
заранее спасибо за помошь
//main.c #include#include "rootsearch.h" int main() { //p,q - переменные для корней; a,b,c - коэффициенты double p=0, q=0, a=0, b=0, c=0; //numberofroots - счетчик корней int numberofroots=0; //ввод коэффициентов scanf("a = %f \n", a); scanf("b = %f \n", b); scanf("c = %f \n", c); //поиск корней numberofroots=rootsearch(a,b,c,p,q); //вывод нужного количества корней if (numberofroots==0) { printf("%s \n", "уравнение не имеет корней"); } else { printf("p = %f \n",p); if (numberofroots==2) { printf("q = %f \n",q); } } }
//rootsearch.h int rootsearch(double a, double b, double c, double p, double q);
//rootsearch.c #include#include "rootsearch.h" int rootsearch (double a, double b, double c, double p, double q) { //если первый коэффициент нулевой if (a == 0) { p = - c / b; rootsearch = 1; } else { //если первый коэффициент не нулевой double d = 0; //нахождение дискриминанта d = b * b - 4 * a * c; //вычисление корней через дискриминант и запись результатов if (d < 0) { return 0; } else { if (d == 0) { return 1; p = - b / (2 * a); } else { return 2; p = (- b + sqrt(d)) / (2 * a); q = (-b - sqrt(d)) / (2 * a); } } } }
Решение задачи: «Вычисление корней квадратного уравнения: как исправить ошибку?»
textual
Листинг программы
objects = main.o rootsearch.o CXX = g++ CC = gcc CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 LDFLAGS = all: $(objects) $(CXX) $(objects) $(LDFLAGS) -o main clean: rm -f *.o rm -f main %.o: %.c mkdir -p build $(CC) -c $(CFLAGS) $< -o $@ %.o: %.cpp $(CXX) -c $(CXXFLAGS) $< -o $@
Объяснение кода листинга программы
objects = main.o rootsearch.o
— это список объектов, которые нужно собрать. В данном случае, программа состоит из двух файлов:main.c
иrootsearch.c
.CXX = g++
— это настройка, которая указывает компилятору, что мы собираем программу на C++, а не на C.CC = gcc
— это настройка, которая указывает компилятору, что мы собираем программу на C, а не на C++.CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
— это настройки компилятора для языка C. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
— это настройки компилятора для языка C++. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.LDFLAGS =
— это настройки линковщика. Здесь нет никаких значений, потому что мы не используем внешние библиотеки.all: $(objects)
— это цель, которую выполняет компилятор. Здесь мы просто указываем, что должны быть собраны все объекты.clean: rm -f *.o
— это цель, которую выполняет компилятор при очистке. Здесь мы удаляем все объектные файлы.%.o: %.c
— это правило для сборки объектных файлов из исходных файлов. Здесь мы указываем, что для каждого файла.c
должен быть создан соответствующий файл.o
.%.o: %.cpp
— это правило для сборки объектных файлов из исходных файлов. Здесь мы указываем, что для каждого файла.cpp
должен быть создан соответствующий файл.o
.mkdir -p build
— это команда для создания директорииbuild
, если она еще не существует.$(CC) -c $(CFLAGS) $< -o $@
— это команда для компиляции исходного файла и создания соответствующего объектного файла. Здесь мы используем компилятор C и включаем все настройки компилятора.$(CXX) -c $(CXXFLAGS) $< -o $@
— это команда для компиляции исходного файла и создания соответствующего объектного файла. Здесь мы используем компилятор C++ и включаем все настройки компилятора.objects = main.o rootsearch.o
— это список объектов, которые нужно собрать. В данном случае, программа состоит из двух файлов:main.c
иrootsearch.c
.CXX = g++
— это настройка, которая указывает компилятору, что мы собираем программу на C++, а не на C.CC = gcc
— это настройка, которая указывает компилятору, что мы собираем программу на C, а не на C++.CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
— это настройки компилятора для языка C. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
— это настройки компилятора для языка C++. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.LDFLAGS =
— это настройки линковщика. Здесь нет никаких значений, потому что мы не используем внешние библиотеки.all: $(objects)
— это цель, которую выполняет компилятор. Здесь мы просто указываем, что должны быть собраны все объекты.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д