递归返回类型

发布于 2024-10-08 18:32:19 字数 589 浏览 3 评论 0原文

我刚刚浏览了 Mark Probst 的文凭论文,并偶然发现了以下代码:

typedef void* cont(void);

for (;;)
{
    cp = (cont*)(*cp)();
}

我很确定演员应该阅读 (cont),而不是 (cont*),因为他解释道:

希望进行正确尾部调用的函数返回要调用的函数的地址

,并且 cont 已经是函数指针类型。因此,让我们将该行更改为:

    cp = (cont)(*cp)();

现在我想知道,我们如何摆脱演员阵容?是否可以定义 cont 以使其返回 contconttypedef 是什么样子的?我们需要一个辅助类型来实现这一点吗?难道不可能吗?

I just browsed through Mark Probst's diploma thesis and stumpled over the following code:

typedef void* cont(void);

for (;;)
{
    cp = (cont*)(*cp)();
}

I'm pretty sure the cast should read (cont), not (cont*), because he explains:

The function wishing to do a proper tail call returns the address of the function to be called

And cont is already a pointer-to-function type. So let's change that line to:

    cp = (cont)(*cp)();

Now I was wondering, how can we get rid of the cast? Can cont be defined so it returns a cont? How would the typedef for cont look like? Do we need a helper type to achieve this? Is it impossible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

睡美人的小仙女 2024-10-15 18:32:19

不,typedef void* cont(void); cont 定义返回 void * 的函数类型。我认为您将其与 typedef void (*cont)(void);typedef void *(*cont)(void); 混淆了。

我不认为在这种情况下可以消除对演员阵容的需要,但我愿意相信其他情况。

No, typedef void* cont(void); cont defines a function type returning a void *. I think you are confusing it with typedef void (*cont)(void); or typedef void *(*cont)(void);.

I don't believe that it's possible to eliminate the need for a cast in this scenario but I'm open to be convinced otherwise.

善良天后 2024-10-15 18:32:19

cont 类型是一个返回 void 指针的函数。因此 cont * 是指向此类函数的指针,并且 * 无法从强制转换中删除。

The type cont is a function returning a void pointer. Therefore cont * is a pointer to such a function, and the * cannot be removed from the cast.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文