c++ - 什么是间接 goto 语句?
问题描述
在 Clang API 中,有 aGotoStmt
和IndirectGotoStmt
. 关于这两种 goto 语句之间的区别的解释很少。我知道什么是goto label;
声明。但是什么是间接 goto 语句?我想知道在 C/C++ 代码的上下文中是什么,不一定只是 Clang。有一个间接的 goto 语句在语法上意味着什么?你能提供一个代码示例吗?
编辑:以下问题很有趣。
解决方案
有一个 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 兼容。
例如,上面的使用可能用于实现状态机。
推荐阅读
- python - 我正在创建一个维基百科搜索引擎,但问题是程序在给出输出后关闭,请检查描述
- python - 如何从正则表达式搜索中提取跨度和匹配?
- spring - 我们如何在 Spring Security 中删除登录页面
- python - How to read a column of datatype json and convert into list using Pandas?
- reactjs - 无法在 reactjs 项目中运行 npm start
- reactjs - 反应事件不更新状态
- java - 如何使用配置文件 maven 指定 Spring Boot 启动器依赖项的版本?
- javascript - 如何在 Javascript 中更改对象的不透明度
- docker - Docker 卷挂载:主机挂载点目录在容器内也可见
- arrays - 如何按多个字段对子文档数组进行分组?