由size_t引起armbi-v7和arm64-v8编译问题

本文讲述了在从armbi-v7编译转向arm64-v8时遇到的问题,涉及函数参数类型冲突,以及在大型工程中处理宏定义和goto语句导致的变量初始化错误。强调了在64位平台上的类型转换注意事项和变量定义的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到了一个编译问题

armbi-v7编译正常通过,但是arm64-v8编译却提示找不到函数

仔细看了mk文件也没找到问题,后来发现函数声明的时候一个参数用了 uint32_t,然后在函数定义的时候用的是size_t,在32位平台上,size_t 就是unsigned int,所以32位编译没问题,但是用到64位编译时,size_t就是unsigned long了,这时候编译器就会发现参数类型不一致,报错找不到函数

顺便记个tips,大型工程中存在很多宏定义调用函数,有些定义中存在着很多goto语句,这时就要注意了,一定要在函数入口处定义所有的变量,如果在goto后面定义初始化了新变量,就会报错交叉初始化。

因为这些goto语句都是隐藏在宏定义下的,有时候得慢慢排查,所以如果工程用了大量的宏控制调用,就注意把变量定义到函数入口处。

再多说一句,.c文件要求定义必须在函数最前面,如果在函数中间出现新变量定义就会报错,但.cpp取消了这一限定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值