错误:使用gcc与'six'冲突的类型

War*_*een 0 c gcc

接收错误:尝试编译时"六"的冲突类型.

void main(){
    const int k = 4;
    six(&k);
}

float * six(const int *x)
{
    float *p =  malloc(sizeof(float));
    *p = (float)*x;
    return p;
}
Run Code Online (Sandbox Code Playgroud)

Zif*_*ion 6

这是正在发生的事情.

当编译器调用函数之前没有遇到函数的原型时,它会从调用本身推断出原型,并假定返回类型为int.这就是它在你的例子中的作用.

后来它找到了函数的定义,并且发现返回类型实际上是float,它与之前推导出的原型不匹配.因此,冲突类型的错误(而不是缺少原型).

当然,解决方案是在调用函数之前为函数提供原型.


nne*_*neo 5

six在调用之前没有向编译器声明,因此编译器被迫猜测签名six是什么(通常,这就是这样int func()).当它看到实际的声明时,它会抛出一个错误,因为实际的函数声明与它的隐式声明不匹配.

你需要在使用之前声明函数; 发表声明就像

float *six(const int *x);
Run Code Online (Sandbox Code Playgroud)

之前main.