如何区分C中的函数指针是指向函数1还是指向函数2

如何区分C中的函数指针是指向函数1还是指向函数2,c,function-pointers,C,Function Pointers,我有两个功能 void foo1(int); void foo2(int); i、 e.双方签字相同。我有一个函数指针 typedef void(*func_pt)(int) 可以指向foo1或foo2,例如 if (match_condition) { func_pt = foo1; } else { func_pt = foo2; } 在代码的后面,我需要找出func_pt是指向foo1还是foo2 如果(func_pt==foo1)似乎可以工作,则此代码 这是推荐的并且安

我有两个功能

void foo1(int);
void foo2(int);
i、 e.双方签字相同。我有一个函数指针

typedef void(*func_pt)(int)

可以指向foo1或foo2,例如

 if (match_condition) {
   func_pt = foo1;
}
else {
   func_pt = foo2;
}
在代码的后面,我需要找出func_pt是指向foo1还是foo2

如果(func_pt==foo1)似乎可以工作,则此代码

这是推荐的并且安全吗?如果没有,除了查找函数指针指向哪个函数之外,还有其他方法吗

我不明白C编译器是如何计算出等式的。只是当编译器看到foo1时,它找到了存储函数指令的代码地址吗


谢谢你的回答是的,它是安全的。根据C99标准的[6.5.9](重点矿山):

两个指针比较相等当且仅当都是空指针,都是指向同一个对象的指针(包括指向对象的指针和开头的子对象)或函数,都是指向同一数组对象最后一个元素的指针,或者一个指针指向一个数组对象的末尾,另一个指针指向另一个数组对象的开头,该数组对象恰好紧跟在地址空间中的第一个数组对象之后


两者都是指针,类型相同。没有错。相关(C++):我给出了一个答案,在这种情况下指针可能不相等。谢谢这确实是一个复制品。在发布我的问题之前,我做了一次搜索,但没有找到任何东西。其实我找了好一阵子。我可能需要磨练我的搜索技能。感谢所有回答的人。非常有用