【发布时间】:2016-03-12 22:01:31
【问题描述】:
接着this excellent SO answer on function pointers;给定一个用 C 定义的函数指针,如:
typedef void (*Callback)(int argument);
Callback my_callback = 0;
如何检查回调函数指针是否被赋值为非空值?
my_callback == 0 或 &my_callback == 0?
【问题讨论】:
-
您确定您了解
&my_callback的作用吗? -
@Leushenko 不,一点也不!因此我的问题。我很困惑,因为使用
my_callback(my_argument)似乎被隐式取消引用。 -
你应该知道0和NULL不一定是一回事。编译器可能会执行所需的隐式转换,但是在初始化函数指针
my_callback时,发布的代码应该使用 NULL,而不是 0 -
其实差别挺大的,0是数值,
int类型。虽然 NULL 是void*类型,但编译器确实关心分配给指针的值的类型。在大多数情况下,编译器会执行必要的隐式转换。这并不意味着在编译器必须通过隐式转换纠正编码器错误(如果可以)的情况下编写代码是“可以的”。
标签: c pointers null function-pointers