函数的隐式声明不应该是?

时间:2019-07-11 20:20:26

标签: c typedef

我正在使用在本地工作的外部文件处理结构和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;
}

这是适用的gcd

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-declaration]

1 个答案:

答案 0 :(得分:4)

警告告诉您该函数在使用前未声明。假定该函数返回一个不受参数类型或数量限制的int值。您可以通过在包含的头文件中或更早的模块中声明该函数来消除该警告并对此函数进行更好的类型检查:

unsigned int gcd(unsigned int u, unsigned int v);
相关问题