-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(cos
、sin
、exp
等)中的一些函数受到影响。使用 errno(strtol
等)的其他标准函数的处理在此标志下不会改变。
我对这个 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(cos
、sin
、exp
等)中的一些函数受到影响。使用 errno(strtol
等)的其他标准函数的处理在此标志下不会改变。