gpt4 book ai didi

c - 退出函数的 noreturn 属性是否必要?

转载 作者:太空狗 更新时间:2023-10-29 16:41:26 24 4
gpt4 key购买 nike

永不返回函数的 noreturn 属性是否必要,或者这只是一个(可以说是过早的?——至少对于退出,我无法想象为什么要在那里优化)优化?

有人向我解释说,在诸如

void myexit(int s) _Noreturn {
exit(s);
}
// ...
if (!p) { myexit(1); }
f(*p);
/// ...

noreturn 防止 !p 分支被优化掉。但是编译器真的可以优化那个分支吗?我意识到优化它的基本原理是:“未定义的行为不会发生。如果 p == NULL,取消引用它是 UB,因此 p 在此上下文中永远不能为 NULL,因此 !p 分支不会触发”。但是编译器不能通过假设 myexit 是一个不返回的函数(即使它没有明确标记为这样)来解决这个问题吗?

最佳答案

这允许进行多项优化。首先,对于调用本身,这可能允许简化设置,不必保存所有寄存器,可以使用 jmp 指令代替 call 或类似指令。那么调用之后的代码也可以优化,因为没有分支回到正常流程。

所以是的,通常 _Noreturn 对编译器来说是一个有值(value)的信息。

但作为对您问题的直接回答,不,这是一个用于优化的属性,因此它不是必需的

关于c - 退出函数的 noreturn 属性是否必要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com