【发布时间】:2016-09-13 14:33:31
【问题描述】:
以下是 comp.lang.c 常见问题解答中的Question 1.22。
为什么ptrfuncptr的定义是必要的?
typedef int (*funcptr)(); /* generic function pointer */
typedef funcptr (*ptrfuncptr)(); /* ptr to fcn returning g.f.p. */
funcptr start(), stop();
funcptr state1(), state2(), state3();
void statemachine()
{
ptrfuncptr state = start;
while(state != stop)
state = (ptrfuncptr)(*state)();
}
funcptr start()
{
return (funcptr)state1;
}
【问题讨论】:
-
返回
int的函数与返回其他内容的函数(在本例中为指向函数的指针)不同。我看不到funcptr state = start;在第二个 sn-p 中是如何编译的(它至少应该是一个警告)。 -
来自同一个常见问题页面的第二种方法更好(正确且更清晰)。
-
@Roland 这只是一个围绕 C 类型系统的游戏。代码本质上试图做通常用汇编语言做的事情。汇编语言通常(如果有的话)不强制也不验证原始数字类型以外的类型。
标签: c pointers function-pointers