Математический интерфейс против cMath в C++

Интерфейс в моей системе сборки MacOS 10.6.3 для математической библиотеки POSIX - math.h, однако в моей целевой системе имя файла интерфейса - cmath.h. В школе мы используем cmath, и я хотел бы убедиться, что мой проект компилируется, когда он передается, как это достигается. Серверы и рабочие станции в школе - x86 под управлением Windows XP. GCC доступен на обеих платформах.

1 ответ

Решение

В стандарте C++ функции математической библиотеки определены в двух заголовках:

<cmath>

содержит их в пространстве имен std (например std::sin), в то время как

<math.h>

содержит их в глобальном пространстве имен (так просто sin).

Между ними есть и другие различия: <math.h> содержит все математические функции C с разными именами для разных типов, такие как

double sin(double);
float sinf(float);
long double sinl(long double);

так далее., <cmath> содержит перегруженные функции, такие как

namespace std {
    double sin(double);
    float sin(float);
    long double sin(long double);
}

и т. д. (библиотеки C++ могут дополнительно экспортировать sinf от <cmath>, но вы не можете полагаться на это в переносимой программе.)

Наконец, fabs, fabsf а также fabsl функции из стандартной библиотеки C стали перегрузками std::abs в <cmath>,

Хотя оба заголовка в стандарте, вы должны действительно <cmath>, как <math.h> только для обратной совместимости с предварительно стандартными C++ и C.

Там нет такого понятия, как <cmath.h> в стандарте C++.

Другие вопросы по тегам