неявное объявление функции, которая не должна быть? - PullRequest
0 голосов
/ 11 июля 2019

Я работаю со структурами и typedef с внешним файлом, который работает локально, но при автоматической проверке я получаю неявное объявление функции "gcd"

этот код состоит из пары функций, которые выполняют базовые функции, такие как возврат сумм и т. Д. Функция gcd, которая была передана нам и подсчитывает наибольший общий делитель, и оба этих кода / фрагмента включены в другой файл main.c: #include "fraction.h" #include "fraction.c"

/* Reduce fraction */
void reduceFraction(Fraction *val) {
    unsigned int fr = gcd(val->numerator, val->denominator);
    val->numerator = val->numerator / fr;
    val->denominator = val->denominator / fr;
}

А это жкд, который работает

unsigned int gcd(unsigned int u, unsigned int v)
{
    // simple cases (termination)
    if (u == v)
        return u;

    if (u == 0)
        return v;

    if (v == 0)
        return u;

    // look for factors of 2
    if (~u & 1) // u is even
    {
        if (v & 1) // v is odd
            return gcd(u >> 1, v);
        else // both u and v are even
            return gcd(u >> 1, v >> 1) << 1;
    }

    if (~v & 1) // u is odd, v is even
        return gcd(u, v >> 1);

    // reduce larger argument
    if (u > v)
        return gcd((u - v) >> 1, v);

    return gcd((v - u) >> 1, u);
}

появляется ошибка: неявное объявление функции "gcd" [-Wimplicit-function-объявление]

1 Ответ

4 голосов
/ 11 июля 2019

Предупреждение говорит о том, что функция не была объявлена ​​перед использованием.Предполагается, что функция возвращает int без ограничений на тип или количество параметров.Вы можете устранить это предупреждение и обеспечить лучшую проверку типов этой функции, объявив функцию во включенном заголовочном файле или ранее в модуле:

unsigned int gcd(unsigned int u, unsigned int v);
...