c++ - 什么是间接 goto 语句?

标签 c++ c llvm-clang goto

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

编辑:以下问题很有趣。

Can you make a computed goto in C++

最佳答案

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

例如,在实现状态机时,可能会用到上述内容。

关于c++ - 什么是间接 goto 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56316820/

相关文章:

c - 使用第二个参数的 ReadConsoleOutputCharacter 错误

c++ - 无法强制 clang CompilerInstance 对象将 header 解析为 C++ 文件

c++ - C++ 编译器是否对 lambda 闭包执行编译时优化?

clang - 在Web程序集中生成内存和表导入/导出

c - C 中的正则表达式 - 搜索信用卡号 - PCI 合规性

c++ - 在 C/C++ 中进行不区分大小写的子字符串搜索的最快方法?

c++ - 使用 OpenCL 加速 Tesseract

c++ - std::time_get - 世纪?

c - 使用保存的 EBP 值识别堆栈中的堆栈帧

c++ - 是否可以从 .sln 文件读取/检索 C++ 源代码?