【发布时间】:2016-01-23 07:46:55
【问题描述】:
我一直在 C++ 中使用函数指针,我一直将它们声明为void (*function)(void)。这是我最初在教程和how tutorials still teach it 中看到的。
但是今天,我在阅读维基百科关于高阶函数的文章时发现了一个使用替代语法的示例,其中 * 和围绕函数指针的变量/类型名称的括号不存在,如 here .
我测试了void function(void) 表单是否适用于变量、参数和类型定义。它不适用于变量,但它适用于没有明显变化的参数和类型定义,实际上可以与标准函数指针语法互换。
我进一步挖掘并发现an SO question 似乎暗示它是“函数原型”而不是函数指针的语法。不过wikipedia's explanation of function prototypes 听起来很像预先声明函数。
对于我的问题范围很广,我深表歉意,但是这个语法到底是什么?
- 它定义了“函数原型”还是函数指针?
- 如果是函数原型,是函数指针和函数 原型相同还是只是行为相同?
- 如果不是函数原型,是否意味着“函数原型” 只是功能的预先声明?
- 如果此语法等价于标准函数指针 语法,为什么更冗长(并且可以说更难阅读)的语法 更常用的教学形式?
- 语法是否产生不同的结果/具有不同的含义 而我不知何故没有注意到?
【问题讨论】:
-
在手机上,所以不会写一个完整的答案,但你展示的语法只能在 typedef 中使用。有点乱!
-
您经常看到函数指针的一个地方是作为参数 (
void(*param)())。这是写void param()的一种情况,就像int[N]作为函数参数实际上是int*,但在其他地方不同。 -
@chris 我只是仔细检查了一下,似乎我确实忘记测试变量大小写。当我开始做更多的研究和写这个问题时,我已经写到一半了,所以我忘记了我实际上并没有按下编译按钮。我现在已经修正了我的问题中的那个错误。
标签: c++ syntax function-pointers function-prototypes