检查typedef定义的函数指针是否为null

时间:2016-03-12 22:01:31

标签: c pointers null function-pointers

继续this excellent SO answer on function pointers;给定一个在C中定义的函数指针,如:

typedef void (*Callback)(int argument);
Callback my_callback = 0;

如何检查回调函数指针是否已分配非空值?

my_callback == 0&my_callback == 0

2 个答案:

答案 0 :(得分:5)

您应该检查my_callback == 0,因为它是一个函数指针。

此外,您正在考虑的第二个选项:

&my_callback == 0

地址,您甚至会被编译器警告:

warning: the comparison will always evaluate as ‘false’ for the address of ‘my_callback’ will never be NULL [-Waddress]
  if(&my_callback == 0)
                  ^

Is NULL always zero in C?

答案 1 :(得分:2)

请记住,变量的类型是函数指针,因此您可以直接将其与NULL0进行比较。

这可能取决于您的编码约定和样式首选项,但我倾向于使用指针作为布尔值本身:

if (my_callback) {
    // Do the thing
}