所有编译器都支持获取goto标签地址并间接跳转吗?
间接Goto标签跳转的兼容性说明
这种通过&&获取标签地址、再用goto *实现间接跳转的写法不属于标准C语法,是GNU C(GCC)的专属扩展特性,无法被所有编译器支持。
具体兼容性情况
- 支持的编译器:GCC、Clang(为兼容GCC实现了该扩展)、MinGW等类GNU编译器。
- 不支持的编译器:严格遵循C标准的编译器(如默认模式下的MSVC,以及部分嵌入式平台专用编译器)。
跨平台替代方案
如果需要实现跨平台的分支跳转逻辑,建议使用标准C支持的方式:
- 用函数指针数组模拟类似的分支选择;
- 基于switch-case构建状态机实现流转。
示例代码:
int main() { void *labels[] = { &&label1, &&label2 }; goto *labels[1]; label1: printf("Label 1\n"); label2: printf("Label 2\n"); return 0; }
内容的提问来源于stack exchange,提问作者FariyaAchhab
相关产品推荐
相关产品推荐

