我刚刚浏览了Mark Probst's diploma thesis并填写了以下代码:
typedef void* cont(void);
for (;;)
{
cp = (cont*)(*cp)();
}
我很确定演员应该阅读(cont)
,而不是(cont*)
,因为他解释道:
希望进行正确尾调用的函数返回要调用的函数的地址
cont
已经是指向函数的指针。所以让我们改变这一行:
cp = (cont)(*cp)();
现在我想知道,我们怎么能摆脱演员?可以cont
定义,以便返回cont
吗? typedef
cont
的外观如何?我们需要帮助器类型来实现这一目标吗?这不可能吗?
答案 0 :(得分:1)
不,typedef void* cont(void);
cont
定义了返回void *
的函数类型。我认为您将其与typedef void (*cont)(void);
或typedef void *(*cont)(void);
混淆。
我不相信在这种情况下可以消除演员阵容的需要,但我愿意相信其他人。
答案 1 :(得分:1)
类型cont
是一个返回void
指针的函数。因此cont *
是指向此类函数的指针,并且无法从演员表中移除*
。