今天分享一个常见的语法告警,就是实参与形参的类型参数对于不上。
错误之处:
首先我们先看一下告警提示:告警:c(49): warning: #69-D: integer conversion resulted in truncation(其翻译过来意思就是:整数转换导致截断)这个我们后面讲解就知道为什么这么提示了
首先看一下我当时报警的语句:
//file1.h---START
#define PageSize 300
void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u8 NumByte);
//file.h---END
//file1.c---START
//定义的函数
void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u8 NumByte)
{
.....
}
//file1.c--END
//file2.c---START
//这里调用函数
I2C_EE_BufferWrite(Buffer, Addr, PageSize); //此句为报警语句
//file2.c---END
我们可以从函数的第三个参数的值和相关形参的类型可以看出,因为我的宏定义将PageSize等效于300,也就是说这个值已经超出了u8的大小范围,所以才会提示“整数转换导致截断”。因为u8只能到255,不能超出。
解决方法:
所以这里我将函数的第三个参数的变量类型从u8改为了u16,使其范围变为0~65535,这样就不会超出其范围了
void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByte)
或者将宏定义的值修改为小于256即可
#define PageSize 200
因此,如果也有小伙伴遇到相同的问题警告,可以去查看一下自己的代码是否存在代入的实参大小超出了形参定义的大小。
本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~