gpt4 book ai didi

c - 为什么 fabs() 在使用 GCC 编译时不需要 -lm 选项

转载 作者:太空狗 更新时间:2023-10-29 15:31:33 25 4
gpt4 key购买 nike

我写了一个简单的程序fabs.c来显示 float 的绝对值。

#include <stdio.h>
#include <math.h>

int main(void)
{
float f;

printf("Enter a floating-point number: ");
scanf("%f", &f);

printf("Its absolute value is %f.\n", fabs(f));
return 0;
}

fabs() 函数需要包含math.h 头文件,但我在没有-lm 选项的情况下编译成功。

  gcc fabs.c -o fabs

甚至 man fabs 也说 link with -lm。但是不知道为什么不用-lm也能编译成功。

最佳答案

如果手册说您应该使用-lm 链接,那么您应该使用-lm 链接。在这种情况下,您的代码足够简单,并且编译器足够聪明,可以将其内联(因为您的系统始终使用内置的 gcc)。也许在某些情况下它无法做到。一些内置的浮点函数如果不能简单地内联(不是 fabs,而是许多其他的),就会回退到库函数。

手册通常会告诉您做并非在所有情况下都绝对必要的事情,因为说“做 X”比说“如果您做 A、B 但不做 C,您可能不必做”更容易X,但请阅读下一版本的手册,因为我们将添加 D,B 可能会更改,我们永远不会更改 A(除非我们改变主意)”。

通过与 -lm 链接,您可以确保您的程序在合理可预见的 future 能够在最合理的系统上运行。即使在这个特定的时间点在一台特定的机器上并不是绝对必要的,但是使用这个特定的代码,用你这次有的特定选项编译。

关于c - 为什么 fabs() 在使用 GCC 编译时不需要 -lm 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com