首页 > 解决方案 > 什么是间接 goto 语句?

问题描述

在 Clang API 中,有 aGotoStmtIndirectGotoStmt. 关于这两种 goto 语句之间的区别的解释很少。我知道什么是goto label;声明。但是什么是间接 goto 语句?我想知道在 C/C++ 代码的上下文中是什么,不一定只是 Clang。有一个间接的 goto 语句在语法上意味着什么?你能提供一个代码示例吗?

编辑:以下问题很有趣。

你能用 C++ 做一个计算的 goto

标签: c++cllvm-clanggoto

解决方案


有一个 GNU 扩展允许获取标签的地址,将其存储以供以后使用,然后goto该地址在以后使用。有关详细信息,请参阅https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html。例子:

    void *ptr;

    if(...)
        ptr = &&foo;
    else
        ptr = &&bar;

    /* ... */
    goto *ptr;

foo:
    /* ... */

bar:
    /* ... */

Clang 也支持这一点,因为它旨在与 GCC 兼容。

例如,上面的使用可能用于实现状态机。


推荐阅读