哪些函数受 -fno-math-errno 影响?

Ben*_*ler 9 c++ gcc errno compiler-optimization math-functions

我对这篇文章感到兴奋:/sf/answers/4037224201/,我考虑使用-fno-math-errno. 但我想确保我不会损害我正在开发的软件的行为。

因此,我检查了(相当大的)代码库以查看errno正在使用的位置,并且我想确定这些用法是否会干扰-fno-math-errno. 但如何做到这一点呢?文档说:

-fno-数学错误号

在调用使用单条指令执行的数学函数(例如 sqrt...)后,请勿设置 errno

但我如何知道单条指令执行了哪些数学函数呢?这有记录在某处吗?在哪里?

似乎我使用的代码库errno特别依赖于调用strtol和使用流时。我猜这strtol不是用一条指令执行的。它是否被认为是一个数学函数?我怎样才能确定?

yug*_*ugr 6

-fno-math-errno您可以在 GCC 的builtins.def中找到受其影响的函数列表(搜索“ERRNO”)。似乎只有math.h标头中的某些功能(cossinexp等)受到影响。使用 errno(strtol等)的其他标准函数的处理在此标志下不会改变。