什么是间接goto语句?

时间:2019-05-26 19:43:21

标签: c++ c llvm-clang goto

在Clang API中,有一个GotoStmt和一个IndirectGotoStmt。关于这两种goto陈述之间的区别,几乎没有解释。我知道什么是goto label;语句。但是什么是间接goto语句?我想知道C / C ++代码上下文中的含义,而不必只是Clang。 间接goto语句在语法上是什么意思?您可以提供一个代码示例吗?

编辑:以下问题很有趣。

Can you make a computed goto in C++

1 个答案:

答案 0 :(得分:8)

有一个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兼容。

例如,在实现状态机时可以使用上面的方法。