接收错误:尝试编译时"六"的冲突类型.
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)
这是正在发生的事情.
当编译器在调用函数之前没有遇到函数的原型时,它会从调用本身推断出原型,并假定返回类型为int.这就是它在你的例子中的作用.
后来它找到了函数的定义,并且发现返回类型实际上是float,它与之前推导出的原型不匹配.因此,冲突类型的错误(而不是缺少原型).
当然,解决方案是在调用函数之前为函数提供原型.
six在调用之前没有向编译器声明,因此编译器被迫猜测签名six是什么(通常,这就是这样int func()).当它看到实际的声明时,它会抛出一个错误,因为实际的函数声明与它的隐式声明不匹配.
你需要在使用之前声明函数; 发表声明就像
float *six(const int *x);
Run Code Online (Sandbox Code Playgroud)
之前main.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |