C函数返回指针位数错误,截断问题

 

问题描述

在C工程中,一个64位系统中如果一个文件中的某个函数A调用另外一个文件中的函数B,但是A文件中没有包含B的声明,gcc可以编译通过,但是如果B函数的返回类型为指针,在64位系统应该返回64bit地址,实际上函数A调用B得到的B的返回指针却是32bit,高32bit被截断。

 

代码示例

https://github.com/musiclvme/ToolsPackages/tree/master/function_def

test.c 里面调用了def.c里面的def_test,但是没有包含def_test.h的声明, 最后ret1得到返回指针为0x13095260,是32bit,高32bit被丢弃了。这样就会导致后面使用ret1这个指针时候肯定会出现问题。

总结

gcc编译器对本函数调用未声明的函数,都为强制将其返回值类型转为int类型,int在64bit系统中占4个字节,这样指针类型的返回值就会出现截断现象!

这类问题需要留意编译当中的警示:warning: implicit declaration of function 'def_test' [-Wimplicit-function-declaration]

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值