我的同学朋友问我一个问题,为什么+-/ *不需要math.h库就可以用C语言工作。
答案 0 :(得分:3)
<math.h>
包含用于数学运算的宏和函数定义。 <math.h>
中的某些功能必须根据C标准提供,但与运算符+
,-
不同,它们仍然不是该语言语法的内在组成部分。 ,*
,/
和%
。
答案 1 :(得分:1)
因为它们符合C的标准,并且它们仅是汇编语言中的一条指令。 /*
* Now the main function fill an array with each object,
* Those functions are located in their respective object file.
*/
objArray[0] = get_security_object();
if (NULL == objArray[0])
{
fprintf(stderr, "Failed to create security object\r\n");
return -1;
}
.
.
.
仅是库的名称。这并不意味着如果您不包括它,就不会有数学。
答案 2 :(得分:1)
如果您查看C Operators,请注意它们都是相当简单的操作,可以对数字和值执行而无需调用函数(sqrt())。这些是C标准的一部分,是语言的基本组成部分,默认情况下,每个程序中都提供这些语言。
math.h Library包含更为复杂的数学运算,主要是函数,而不是小的汇编指令。这些语言不需要包含在语言中,因为并非每个程序都需要平方根或余弦。
答案 3 :(得分:0)
基本运算符是该语言语法的一部分。在库中,存在由基本运算符或其他库组成的“高级功能”。因此,您可以将所有想法都还原为某种语言的基本结构……当然。
答案 4 :(得分:0)
算术运算符内置在语言语法中-它们不是像sqrt()
或abs()
之类的单独库调用。因此,它们不需要作用域中的任何声明即可起作用。
答案 5 :(得分:0)
首要地,某些操作而不是其他操作需要math.h
的原因是,设计C的人决定将某些内容构建到核心语言中,并将某些内容保存在单独的集合中,包括一组内容用于数学,用于字符串的一组事物,用于时间的一组事物,用于输入和输出的一组事物,等等。
可以将math.h
中的内容构建为核心语言。例如,sizeof
内置在语言中,因此也可以将sqrt
内置到语言中,不需要对语法进行任何更改。同样,从理论上讲,可以从核心语言中排除某些操作,例如*
,并要求您在使用它们之前先加入math.h
。但是,该语言提供了声明诸如sqrt
之类的函数的方法,但没有提供声明诸如*
之类的运算符的方法,因此必须对语法进行一些更改以支持此方法。
因此,由于核心语言可以可能,因此可以包括或排除各种事物,因此,包括或排除各种事物的原因在某种程度上是一个选择问题。从本质上讲,基本算术运算被认为是基本的并且非常有用,因此它们成为核心语言的一部分,而其他函数则不是。造成这种情况的因素有很多。
人们希望避免语言混乱。如果标头中声明的所有功能都是核心语言的一部分,则sqrt
仅可用于sqrt
中的math.h
。程序员不能将sqrt
用作自己的变量名。对于一些名称来说这很好,但是随着库的增长,库中的名称与常规源代码中的名称之间发生冲突的机会也会增加。
另外,如果存在现有源代码并且有人对新例程有聪明的主意,则将新例程名称添加到语言中可能会破坏已经使用该名称用于其他用途的现有代码。
因此,通常,我们倾向于在单独的集合中实现非必需的例程,然后作者可以选择包括他们想要使用和学习的例程,然后他们可以将不需要的例程排除在外,从而避免出现问题。
将库分成这样的集合也意味着程序未使用的库例程不必链接到最终程序可执行文件中,因此可执行文件可以更小。
此外,这意味着C可以在多种环境中使用,例如不能支持完整数学库的小型计算机。有人可能想运行简单的程序,这些程序只能在小型处理器上使用基本算术。如果C的核心语言很小,他们可以编写这样的程序。如果每个C程序都必须在库中包含所有例程,则可能无法在小型计算机上运行C。