检查 typedef 定义的函数指针是否为空
Checking typedef defined function pointer for null
从 this excellent SO answer on function pointers 开始;给定一个用 C 语言定义的函数指针,如:
typedef void (*Callback)(int argument);
Callback my_callback = 0;
如何判断回调函数指针是否被赋了非空值?
my_callback == 0
或 &my_callback == 0
?
记住变量的类型是函数指针,所以你可以直接和NULL
或0
.[=13=比较]
这可能取决于您的编码约定和风格偏好,但我倾向于使用指针作为布尔值本身:
if (my_callback) {
// Do the thing
}
您应该检查 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?
从 this excellent SO answer on function pointers 开始;给定一个用 C 语言定义的函数指针,如:
typedef void (*Callback)(int argument);
Callback my_callback = 0;
如何判断回调函数指针是否被赋了非空值?
my_callback == 0
或 &my_callback == 0
?
记住变量的类型是函数指针,所以你可以直接和NULL
或0
.[=13=比较]
这可能取决于您的编码约定和风格偏好,但我倾向于使用指针作为布尔值本身:
if (my_callback) {
// Do the thing
}
您应该检查 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?