Похоже, у вас есть фундаментальное неправильное понимание назначения файлов заголовков - они существуют для того, чтобы гарантировать, что разные исходные (.c) файлы все согласуются с глобальными вещами (типами переменных и т. Д.).
Вы, похоже, пытаетесь вставить код функции в свой заголовок. Линия
float Header( float l1, float l2);
- это предварительное объявление для глобального заголовка подпрограммы, которое принимает два параметра, каждый из которых является плавающим.
Но тогда вы, кажется, вставляете то, что должно быть содержимым функции Header (), которая должна быть в файле .c. Вы получаете ошибки компиляции, потому что у вас есть точка с запятой в конце строки объявления. Функция должна выглядеть примерно так:
float Header( float l1, float l2)
{
float a1, a2, return_value;
float l1= (((-1)*(a1)) + sqrt( (pow(a1,2)) - (4*a1*a2))) / (2);
float l2= (((-1)*(a1)) - sqrt( (pow(a1,2)) - (4*a1*a2))) / (2);
return some_value;
}
Этот код все еще неверен (он ссылается на неназначенные переменные a1 и a2 и перезаписывает переданные переменные l1 и l2. И возвращаемое значение никогда не присваивается - предположительно, намерение состоит в том, чтобы что-то сделать с l1 и l2 и вернуть результаты.
Если вы исправите эти ошибки и включите функцию Header (), она на самом деле скомпилируется, если вы # включите ее из файла .h в файл .c, но это будет крайне плохая идея. Это означало бы, что если два файла .c оба # include'd его, вы получите ошибку ссылки, так как будут определены два экземпляра Header (). только время, когда у вас должна быть функция C в файле .h, если вы объявляете функцию static inline
.
Комментарии к вашему новому коду:
Ваш файл roots.h выглядит нормально.
Файл roots.c должен только #include <math.h>
один раз. Это безопасно делать несколько раз, так как вокруг него есть директивы #ifndef, но для этого нет причин. Вы также должны включить в него «inc.ins », чтобы гарантировать, что вы объявляете свои функции так, как ожидают вас другие файлы. В коде, который вы даете, у вас есть ошибка в том, что posroot () и negroot () определены как возвращающие int, но в файле roots.h говорится, что они возвращают float. С параметром #include «roots.h» вы гарантированно получите ошибку компиляции (а это именно то, что вам нужно. Без нее вам потребуется отладить код, чтобы выяснить, в чем дело).
Файл main.c выглядит нормально, хотя я не понимаю, почему вы просите пользователя ввести y0 и dy0, когда вы их ни для чего не используете.