• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

为啥函数指针都要判断NULL并return false

huihui163 2019-05-29 浏览量:814
在stm32中,
bool led_init(led_t fn_led_on led_t fn_led_off)
{
    if ((NULL == fn_led_on) || (NULL == fn_led_off))
    {
        return false;
    }

    /@@* 注册用户函数 */
    s_flash_on  = fn_led_on;
    s_flash_off = fn_led_off;

    return true;
}
led_t为函数指针类型,为啥函数指针都要判断NULL并return false,但是程序中却没有对返回值处理
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:3
  • 返回false就说明已经初始化过了,代表之前已绑定,true就是地址绑定成功,如果要再次绑定必须把这个两个指针再外部赋值null
yhj416606438 回复了 yhj416606438:刚才说反了,应该是赋值地址后才能给s_flash_on和s_flash_off赋值地址,如果之前是空就返回false,防止地址错误造成程序错误 回复
huihui163 回复了 yhj416606438:问题是对返回值没有判断处理,这样返回有啥用 回复

  • 这种是为了防止调用这个函数的时候出错,如果操作了空指针,有可能会出现段错误,导致程序异常退出,所以建议在操作指针前先判断是否合法
huihui163 回复了 chen0000009:问题是对返回值没有判断处理啊, 回复

  • STM32中 NULL实际就是数值0,如果一个函数指针的值为0,直接调用就是调用地址0处的程序,程序会跑飞。所以要判断,地址为0不执行。

相关问题

问题达人换一批

为啥函数指针都要判断NULL并return false