【发布时间】:2013-10-08 23:16:30
【问题描述】:
比我更资深、更有经验和受过更好教育的程序员告诉我,应该避免在c 中使用function-pointers。我已经看到一些代码包含函数指针作为不重用该代码的理由这一事实,即使唯一的选择是完全重新实现也是如此。经过进一步讨论,我无法确定为什么会这样。我很高兴在适当的地方使用函数指针,并且喜欢它们允许您做的有趣而强大的事情,但是我是否在使用它们时将谨慎抛诸脑后?
我看到函数指针的优缺点如下:
优点:
- 代码模块化的绝佳机会
- 非 OO c 中的类似 OO 的功能(即同一对象中的代码和数据)
- 您还能如何合理地实现回调?
缺点:
- 对代码可读性的负面影响 - 调用函数指针时实际调用的函数并不总是很明显
- 与直接函数调用相比,性能损失较小
我认为 Con #1. 通常可以通过精心选择的符号名称和良好的 cmets 来合理地缓解。而Con #2. 一般不会有什么大不了的。我是否遗漏了什么 - 还有其他原因可以避免像瘟疫这样的函数指针吗?
这个问题看起来有点讨论,但我正在寻找为什么我不应该使用函数指针而不是意见的充分理由
【问题讨论】:
-
先看看这里吧?半相关? stackoverflow.com/questions/667410/…
-
你为什么不问问这些更资深、更有经验、受过良好教育的程序员,当你有他们的注意力时,他们的意思是什么?
-
不,他们不是邪恶的。
-
他们在尽可能远的地方找到工作(最好是在不同的领域?)听起来是个好消息。
-
骗局 #2 通常是错误的。在现代系统上,对共享库中函数的所有调用都是技术上间接调用(相当于函数指针)。在现代 cpu 上,只要目标地址是 cpu 可预测的,间接调用基本上没有成本,所以这没什么大不了的。
标签: function-pointers c c function-pointers