Gal*_*axy 12 c c++ goto llvm-clang
在Clang API中,有GotoStmt和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:
/* ... */
Run Code Online (Sandbox Code Playgroud)
Clang也支持这一点,因为它旨在与GCC兼容。
例如,在实现状态机时可以使用上述方法。