C语言函数未声明可能会导致返回值数据错误

计算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型,如果之后的编译链接中发现这个函数的真正定义并不是编译器假设的那样,再报错。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值