函数未声明导致返回值错误

11月23日

我在计算cpu的使用率。代码中定义了一个用于计算cpu使用率的函数cal_cpuoccupy(),返回值为double,具体原型为:

double cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)

剩下的工作就是调用,调用时发现:double cpu = cal_cpuoccupy(),return的结果cpu,%f打印出来死活不对,是一个乱掉的数字。。。
11月24日 我继续调试这个问题,我发现将变量double cpu作为结果参数传入cal_cpuoccupy(),结果是正确的的,打印地址也都是对的,修改后的原型为:

double cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n, double *s)

但是返回值依旧不正确

在网上看到一句话给了我启发:函数没有写返回类型,那么默认为int。

我马上写了个函数测试了下,gcc编译器会报警告:return type defaults to ‘int’,我的测试函数定义为func { ... },看到这我就想,我的函数有定义,但是没有声明,那么编译器会不会把这个函数返回值默认设置为int呢,有可能,所以我在代码中,调用前加入了extren声明了外部函数,试了之后发现,函数的返回值终于正确了!

确实是这样,真的是这样?我又想到了,如果是这样,那么编译和链接肯定会对函数有什么不一样的操作,应该在深入了解一下,果然又发现一句话:

        C语言并不强行要求函数在使用前先声明。如果你在代码中写了一个未声明的函数,那么编译器编译到这里时会假设这个函数的参数列表就是你使用它的这些参数类型,而返回值为int型,如果之后的编译链接中发现这个函数的真正定义并不是编译器假设的那样,再报错。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章