fabs vs. fabsl, должен ли я когда-либо печатать fabsl в моем источнике?

Я переписываю некоторый код Mac, который встраивает бесплатную библиотеку, первоначально написанную на C. Компилятор жалуется, что, так как я использую long doubleЯ должен использовать fabsl скорее, чем fabs, Поэтому я пошел и изменил их.

Однако, читая несколько страниц по теме, кажется, что не должно быть никакой разницы, что начиная с C99, существует универсальный макрос типа, который вставляет правильный вызов на основе типа.

Так, возможно, я использую неправильный диалект?

Кто-нибудь знает, что такое компилятор по умолчанию в xcode7, и есть ли у него общий макрос?

1 ответ

Решение

Общий макрос определен в <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
Другие вопросы по тегам