模拟 GCC 的 __builtin_unreachable?

新手上路,请多包涵

我收到 很多 关于开关的警告,这些警告仅部分覆盖了切换的枚举范围。因此,我想为所有这些开关设置一个“默认值”,并在这种情况下放置 __builtin_unreachable (GCC 内置),以便编译器知道这种情况是不可达的。

但是,我知道 GCC4.3 还不支持该内置函数。有什么好方法可以模拟该功能吗?我考虑过取消引用空指针,但这可能会产生其他不良影响/警告等。你有更好的主意吗?

原文由 Johannes Schaub - litb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 846
1 个回答

您可以调用声明为 _Noreturn 的内联函数,将该调用之后的任何内容标记为无法访问。允许编译器在这样的函数之后抛出任何代码。如果函数本身是 static (并且确实返回),编译器通常也会内联该函数。这是一个例子:

 static _Noreturn void unreachable() {
    return; /* intentional */
}

/* ... */

foo();
bar(); /* should better not return */
unreachable();
baz(); /* compiler will know this is not reachable */

请注意,如果标记为 _Noreturn 的函数确实返回,您将调用未定义的行为。确保永远不会调用该函数。

原文由 fuz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏