1,在项目中,我们经常会用到变量,那么在变量的定义和传递过程中,经常会出现负数的翻转问题:
int test_funtion()
{
return -1;
}
void poll_fun(unsigned int a)
{
while( a > 250)
{
printf("poll fun\n");
}
}
void test_negative()
{
char function_ret;
f_ret = test_funtion();
//轮训函数
poll_fun(f_ret);
}
在数据传递过程中,int 类型的-1转为unsigned char 型数据 源码:1 000 0001(补码:1111 1111)所以我们会看到 a = 255,poll_fun一直会处于循环中。
总结:
1) 在参数要求是无符号型的函数中使用有符号整型数作为参数时,先做参数合法性检查,避免使用负数;
2) 在用有符号整型数作为数组下标时,先做参数合法性检查,避免使用负数;
3) 在用有符号整型数作为循环语句上限时,先做参数合法性检查,避免使用负数。