fabs 与 fabsl,我是否必须在源代码中输入 fabsl?

fabs vs. fabsl, should I ever have to type fabsl in my source?

我正在重写一些 Mac 代码,这些代码嵌入了一个最初用 C 编写的免费软件库。编译器抱怨说因为我正在使用 long double,所以我应该使用 fabsl而不是 fabs。所以我去改了。

但是,阅读 a few pages 主题似乎应该没有区别,自从 C99 以来,就有一个类型泛型宏可以根据类型插入正确的调用。

也许我用错了方言?

有谁知道 xcode7 中的编译器默认值是什么,它是否有通用宏?

泛型宏在<tgmath.h>中定义,所以你需要#include it,如下片段所示:

#include <tgmath.h>
#include <stdio.h>

int main() {
  long double ld = 3.14;
  double d = 3.14;
  float f = 3.14f;
  printf("%Lf %lf, %f\n",fabs(ld), fabs(d), fabs(f));
  return 0;
}

它可以完美地编译

gcc -Wall -Wextra a.c -oa -std=c99