标准库函数abs()
在stdlib.h
中声明,而fabs()
在math.h
中。
为什么它们位于不同的标题中?
答案 0 :(得分:5)
math.h首次出现在第七届Unix研究中。很难说它是如何到达那里的。例如,[1]声称C库的某些部分是从" PWB / Unix"其中包括troff
和C编译器pcc
,但我无法证明这一点。
另一个有趣的信息是来自V7 Unix的库手册: intro.3:
(3) These functions, together with those of section 2 and those marked (3S), constitute library libc, which is automatically loaded by the C compiler cc(1) and the Fortran compiler f77(1). The link editor ld(1) searches this library under the `-lc' option. Declarations for some of these functions may be obtained from include files indicated on the appropri- ate pages.
< ...>
(3M) These functions constitute the math library, libm. They are automati- cally loaded as needed by the Fortran compiler f77(1). The link editor searches this library under the `-lm' option. Declarations for these functions may be obtained from the include file <math.h>.
如果查看V7命令makefile,只有少数C程序与-lm
标志链接。所以我的结论是推测性的:
libm.a
(和math.h
)主要用于FORTRAN程序,因此它被分成库以减少二进制占用空间(请注意它是静态链接的)。1. A History of UNIX before Berkeley: UNIX Evolution: 1975-1984
答案 1 :(得分:-1)
大多数像+ - / *这样的运算符也是数学运算符,但这些运算符也很容易获得。在编程时你使用了如此多的数学,开发人员已经开始区分日常用品所需的数学和更专业的数学,而你只是在某些时候使用。 Abs是经常使用的功能之一。与指针算法一样,只是想知道差异来计算内存块的大小。但是你不知道哪个内存更高,哪个更低。
总而言之:经常使用abs,因为它计算两个整数的差异。例如,两个指针之间的差异也是整数。所以它在stdlib.h中。除非你在做数学特定的东西,否则你不会需要太多东西。因此它在math.h中。