计算cpu的使用率。代码中定义了一个用于计算cpu使用率的函数cal_cpuoccupy(),返回值为double,具体原型为:
double cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)
剩下的工作就是调用,调用时发现:double cpu = cal_cpuoccupy(),return的结果cpu,%f打印出来一直不对,是一串无序的数字。
继续调试这个问题,我发现将变量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型,如果之后的编译链接中发现这个函数的真正定义并不是编译器假设的那样,再报错。