比我更高级,经验丰富,受过良好教育的程序员告诉我,应该避免在function-pointers中使用c。我已经看到一些代码包含函数指针作为不重用该代码的理由,即使唯一的替代方法是完全重新实现。经过进一步讨论,我无法确定为什么会这样。我很乐意在适当的时候使用函数指针,就像它们允许你做的有趣和强大的东西一样,但我是否因使用它们而小心翼翼?
我看到函数指针的优缺点如下:
优点:
缺点:
我认为Con#1通常可以通过精心挑选的符号名称和良好的评论来合理地减轻。而Con#2通常不是什么大问题。我错过了什么 - 是否有其他原因可以避免瘟疫等功能指针?
这个问题看起来有点讨论 - 但是我正在寻找很好的理由,为什么我不应该使用函数指针而不是意见
答案 0 :(得分:5)
函数指针不是邪恶的。你不应该使用它们的主要时间是:
至于何时需要函数指针,Adam的回答提供了一些很好的例子。所有这些示例中的共同主题是调用者需要能够提供从被调用函数运行的部分代码。如果没有函数指针,那么你可以做到这一点的唯一方法就是复制并粘贴函数的实现,并为每个单独的用例调整部分函数来调用不同的函数。对于qsort
和bsearch
,可以移植实现,这只会令人讨厌而且非常丑陋。另一方面,对于线程创建,如果没有函数指针,则必须为正在运行的特定操作系统复制并粘贴部分系统实现,并调整它以调用所需的函数调用。这显然是不可接受的;你的程序将完全不可移植。
因此,函数指针对于某些任务是绝对必要的,对于其他任务,它们是一个主要的便利,它允许重用通用代码。我认为没有理由不在这种情况下使用它们。
答案 1 :(得分:4)
如果没有函数指针,则无法实现:
还有更多。