在Clang API中,有一个GotoStmt
和一个IndirectGotoStmt
。关于这两种goto陈述之间的区别,几乎没有解释。我知道什么是goto label;
语句。但是什么是间接goto语句?我想知道C / C ++代码上下文中的含义,而不必只是Clang。 间接goto语句在语法上是什么意思?您可以提供一个代码示例吗?
编辑:以下问题很有趣。
答案 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兼容。
例如,在实现状态机时可以使用上面的方法。