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