their includes headers functions files define cpp compile and c++ header include

includes - C++-cmath vs math.h(y encabezados de extensión similares a c precedidos c.h)



include class c++ (3)

He visto información sobre las diferencias entre cosas como iostream vs iostream.h . Por lo que he deducido de aquellos, la diferencia entre ellos es que la versión sin la extensión .h no rellenará el espacio de nombres mientras que la versión con la extensión sí lo hará.

¿Es esto lo mismo para cmath vs math.h ? ¿Por qué cmath (y muchos otros archivos como este) cmath como prefijo una c lugar de simplemente ser math ? ¿Hay más diferencias entre ellos?

¡Gracias por tu tiempo!


He visto información sobre las diferencias entre cosas como iostream vs iostream.h.

[iostream.h] no es un encabezado estándar.

no es un ejemplo del problema que estás planteando.

[cmath] define símbolos en el std nombres std , y también puede definir símbolos en el espacio de nombres global. [math.h] define símbolos en el espacio de nombres global, y también puede definir símbolos en el std nombres std . si incluye el primero y usa un símbolo no calificado, puede compilar con un compilador pero no con otro. por lo tanto, es una buena idea usar [math.h]. y, en general, para tales pares de encabezados, para usar la versión [.h].

c ++ 98 proporcionaba una garantía formal de que el encabezado c xxx no contaminaba el espacio de nombres global. tal vez por eso fueron definidos. sin embargo, eso fue un poco más difícil de implementar que los contaminantes, por lo que en la práctica ninguna implementación de biblioteca estándar que yo conozca siguió el estándar a este respecto, y finalmente se modificó para reflejar la realidad en c ++ 11.


Los encabezados cuyos nombres comienzan con c se derivan de los encabezados de la biblioteca estándar de C. Los encabezados correspondientes con el prefijo c eliminado y el sufijo .h agregado son idénticos (o casi idénticos) a los encabezados de biblioteca estándar de C.

<cmath> define los símbolos relevantes bajo el std nombres std ; <math.h> define globalmente.

(Acabo de enterarme de que no es tan simple, mira la respuesta de Alf).


Quizás esto sea útil:

La biblioteca C ++ incluye las mismas definiciones que la biblioteca de lenguaje C organizada en la misma estructura de archivos de encabezado, con las siguientes diferencias:

1 - Cada archivo de encabezado tiene el mismo nombre que la versión en C, pero con un prefijo "c" y sin extensión. Por ejemplo, el equivalente de C ++ para el archivo de cabecera del lenguaje C <stdlib.h> es <cstdlib>.

2 - Todos los elementos de la biblioteca se definen dentro del espacio de nombres estándar.

encabezados de extensión c-prefijado vs .h