2010-05-17 27 views
16

Estoy usando la macro EXIT_FAILURE, así que necesito incluir stdlib.h o cstdlib. Pero no sé cuál es la diferencia. ¿Debo usar el archivo de encabezado de estilo cXXX en lugar de XXX.h?¿Cuál es la principal diferencia entre stdlib.h y cstdlib en C++?

Gracias.

+0

Posible duplicado de [¿Cuál es la diferencia entre cstdlib y stdlib.h?] (Http://stackoverflow.com/questions/2900785/whats-the-difference-between-cstdlib-and-stdlib-h) –

+0

mi respuesta actualizada aquí. http://stackoverflow.com/questions/13889467/should-i-include-xxxx-h-or-cxxxx-in-c-programs/43016708#43016708 – 0xDEFACED

Respuesta

17

Como EXIT_FAILURE es una macro, no importa que incluya. La versión cstdlib pondrá los nombres de todas las funciones en el espacio de nombres std, por lo que puede decir cosas como:

std::exit(0); 

pero como macros no respetan los espacios de nombres, no se puede decir:

std::EXIT_FAILURE 
+0

Gracias, pero aún puedo llamar a 'exit (EXIT_FAILURE)' sin 'std ::' cuando incluyo 'cstdlib'. – Brian

+0

@Brian Sí, la función de salida estará en los espacios de nombres global y estándar, –

+0

Además, algunas sobrecargas se declaran para tratar el problema de consistencia de strtol()] (http://www.cpptalk.net/strtol- const-ness-problem-vt54984.html) y problemas similares. –

25

<cstdlib> es solo <stdlib.h> envuelto en el espacio de nombres std. Debería usar <cstdlib> para mantener limpio su espacio de nombres global.

Cuestiones relacionadas