2012-01-04 9 views
9

Interfejs w moim systemie kompilacji MacOS 10.6.3 dla biblioteki matematycznej POSIX to math.h, jednak w moim systemie docelowym nazwa pliku interfejsu to cmath.h. W szkole używamy cmath i chciałbym mieć pewność, że mój projekt zostanie skompilowany, gdy zostanie przekazany, w jaki sposób jest to osiągnięte. Serwery i stacje robocze w szkole to x86 z systemem Windows XP. GCC jest dostępny na obu platformach.Interfejs matematyczny vs cMath w C++

+0

Jaki jest twój "system docelowy". Jaki kompilator, jaki system operacyjny? Zapytaj nauczyciela o różnice między 'cmath.h' i' math.h'? Czy jest to '' lub ''? –

+0

Przepraszam, chodzi mi o to, że macos to mój system hosta, a Windows XP to mój system docelowy. A jeśli mój prof znał odpowiedź, nie musiałbym tutaj pytać. – awiebe

Odpowiedz

18

W ++ standard C, funkcje biblioteczne matematyki są zdefiniowane w dwóch nagłówków:

<cmath> 

zawiera je w przestrzeni nazw std (np std::sin), natomiast

<math.h> 

zawiera je w światowym przestrzeń nazw (tak po prostu sin).

Istnieją również inne różnice między dwoma: podczas <math.h> zawiera wszystkie funkcje matematyczne C z różnych nazw różnych typów, takich jak

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

itp <cmath> zawiera przeciążonych funkcji, takich jak

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

itp. (Biblioteki C++ mogą dodatkowo eksportować sinf z <cmath>, ale nie można na nich polegać w programie przenośnym.)

Wreszcie, funkcje fabs, fabsf i fabsl ze standardowej biblioteki C stały się przeciążeniami std::abs w <cmath>.

Choć oba nagłówki są w normie, należy naprawdę wolą <cmath>, jak <math.h> jest tam tylko dla wstecznej kompatybilności z pre-standardowej C++ i C

Nie ma czegoś takiego jak <cmath.h> w standardowej C++.

+0

OK. Usunięto moją odpowiedź, zamiast ją edytować, ponieważ opisałeś tu ważne fragmenty. Myślę, że warto wspomnieć o używaniu stylu nazewnictwa dla innych standardowych bibliotek, ale pozostawiam to tobie. –

+0

@HarperShelby: wstaw to, pod koniec. Mam nadzieję, że PO będzie tak daleko, ponieważ jest to całkiem spora lista;) –

+0

Celem jest uzyskanie dobrych informacji - możesz doprowadzić konia do wody i tak dalej. –