You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何告知GCC/Clang某函数总会正常返回?

如何告知编译器某函数总会正常返回?

先看这段C代码:

double local_array[10];
/* local computations */
f(); // f()无法修改local_array,因为它没有逃逸
local_array[i] += 5.0;

如果确定f()总会正常返回,编译器可以把local_array[i] += 5.0;移到f()调用前做优化——这样能把加载-浮点加法-存储的指令序列和前置计算交错执行,提升效率。

但如果没法确定f()是否正常返回,这种优化就可能违反C标准。比如f()可能打印错误信息后直接退出程序,要是提前执行local_array[i]的访问,万一i的值非法导致内存访问无效就很危险——毕竟我们没法确认这个指针指向合法可写内存,说不定f()本身会检查并排除i的无效值。

问题来了:有没有办法告诉GCC或Clang这类编译器,某个函数一定会正常返回?

目前有nothrow属性,但它的功能和我们需要的不一样。我们需要的是noreturn属性的“对偶”——noreturn表示函数从不返回,而我们需要的是函数必定返回的标注。

背景补充:PostgreSQL曾遇到过一个问题,旧版GCC会把陷阱指令移到终止程序的函数调用前做优化,这个行为被认为是不正确的,因此需要找到合法启用这类优化的方式。

内容的提问来源于stack exchange,提问作者David Monniaux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:32:03