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

Which functions are affected by -fno-math-errno?

我对这个 post 很兴奋: 我考虑使用 -fno-math-errno。但我想确保我不会损害我正在使用的软件的行为。

因此我检查了(相当大的)代码库以查看 errno 的使用位置,我想确定这些用法是否会干扰 -fno-math-errno。但是怎么做呢?文档说:

-fno-math-errno

Do not set errno after calling math functions that are executed with a single instruction, e.g., sqrt...

但是我怎么知道一条指令执行了哪些数学函数呢?这在某处记录了吗?在哪里?

我使用的代码库似乎依赖于 errno,尤其是在调用 strtol 和处理流时。我猜 strtol 不是用一条指令执行的。它是否被认为是一个数学函数?我怎么能确定?

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