我有两个功能
void foo1(int);
void foo2(int);
即。两者都有相同的签名。我有一个函数指针
typedef void (*func_pt)(int)
可以指向foo1或foo2,例如
if (match_condition) {
func_pt = foo1;
}
else {
func_pt = foo2;
}
稍后在代码中,我需要找出func_pt是否指向foo1或foo2。
此代码if (func_pt == foo1)
似乎有效。
这是推荐的还是安全的吗?如果没有,是否有任何替代方法可以找出函数指针指向哪个函数?
我不明白C编译器如何能够找出相等性。只是当编译器看到foo1时,它会找到存储函数指令的代码的地址吗?
感谢您的回答
答案 0 :(得分:2)
是的,这是安全的。从C99标准的[6.5.9](强调我的):
两个指针比较相等,当且仅当都是空指针时,都是指向同一个对象的指针(包括指向对象的指针和开头的子对象) )或函数,两者都是指向同一个数组对象的最后一个元素之后的指针,或者一个是指向一个数组对象末尾的指针,另一个是指向一个数组对象的开头的指针一个不同的数组对象恰好跟随地址空间中的第一个数组对象。