所以我在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的新手,我无法理解为什么我会收到此警告。
答案 0 :(得分:3)
在C中,函数(或它的原型)应在之前声明,以便确定它的正确签名。否则编译器将尝试"猜测"正确的签名。虽然它可以从调用中推断出参数类型,但返回值类型不是这种情况,它默认为int
。在您的代码中,函数在使用之前没有原型,因此编译器假设它正在返回int
。这就是它警告您不兼容类型分配的原因。