为什么我从不兼容的指针类型警告中进行初始化?

时间:2015-08-11 16:39:53

标签: c initialization warnings

所以我在Linux上使用gcc并在单独的文件中包含以下两个代码片段(仅包含相关的代码部分):

int main()
{
    /* Code removed */
    int_pair_list *decomp = prime_decomp(N);
    if (decomp)
        while(decomp->next)
            decomp = decomp->next;
    printf("%d\n" decomp->value_0);
}

int_pair_list *prime_decomp(unsigned int n)
{
    int_pair_list *head = malloc(sizeof(*head));
    int_pair_list *current;
    /* method body removed, current and head remain as int_pair_list pointers */
    return current ? head : NULL;
}

程序编译并正确运行,但在编译期间,我收到警告:

problem_003.c: In function ‘main’:
problem_003.c:7:26: warning: initialization from incompatible pointer type [enabled by default]
  int_pair_list *decomp = prime_decomp(N);
                      ^

我是C的新手,我无法理解为什么我会收到此警告。

1 个答案:

答案 0 :(得分:3)

在C中,函数(或它的原型)应在之前声明,以便确定它的正确签名。否则编译器将尝试"猜测"正确的签名。虽然它可以从调用中推断出参数类型,但返回值类型不是这种情况,它默认为int。在您的代码中,函数在使用之前没有原型,因此编译器假设它正在返回int。这就是它警告您不兼容类型分配的原因。