2012-01-04 20 views
9

La interfaz en mi sistema de compilación MacOS 10.6.3 para la biblioteca matemática POSIX es math.h, sin embargo, en mi sistema de destino el nombre del archivo de interfaz es cmath.h. En la escuela utilizamos cmath y me gustaría asegurarme de que mi proyecto compila cuando se entrega, cómo se logra esto. Los servidores y estaciones de trabajo en la escuela son x86 con Windows XP. El GCC está disponible en ambas plataformas.Interfaz matemática vs cMath en C++

+0

¿Cuál es su "sistema de destino". ¿Qué compilador, qué sistema operativo? Pregúntale a tu profesor las diferencias entre 'cmath.h' y' math.h'? ¿Es '' o ''? –

+0

Lo siento, me refiero a que macos es mi sistema host y Windows XP es mi sistema de destino. Y si mi profesor conociera la respuesta, entonces no tendría que preguntar aquí. – awiebe

Respuesta

18

En el estándar C++, las funciones de la biblioteca de matemáticas están definidos en dos cabeceras:

<cmath> 

ellos contiene en el espacio de nombres std (por ejemplo std::sin), mientras que

<math.h> 

ellos contiene en el mundial espacio de nombres (tan solo sin).

Hay otras diferencias entre los dos: funciones mientras <math.h> contiene todas las funciones matemáticas C con nombres diferentes para tipos distintos, tales como

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

etc., <cmath> contiene sobrecargado como

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

etc. (Las bibliotecas de C++ también pueden exportar sinf de <cmath>, pero no puede confiar en esto en un programa portátil)

Finalmente, las funciones fabs, fabsf y fabsl de la biblioteca estándar C se han convertido en sobrecargas de std::abs en <cmath>.

Aunque ambas cabeceras están en la norma, que realmente debería prefiere <cmath>, como <math.h> sólo está allí para mantener la compatibilidad con C pre-estándar ++ y C

No hay tal cosa como <cmath.h> en C++ estándar.

+0

OK. Eliminé mi respuesta en lugar de editarla, ya que cubriste las partes importantes aquí. Creo que vale la pena mencionar el uso del estilo de nomenclatura para otras bibliotecas estándar, pero lo dejo en tus manos. –

+0

@HarperShelby: ponlo, cerca del final. Espero que el OP lo lea hasta ahora, porque esta es toda una lista;) –

+0

El objetivo es obtener buena información por ahí: puedes llevar un caballo al agua y todo eso. –

Cuestiones relacionadas