2010-05-17 6 views
16

Sto usando la macro EXIT_FAILURE, quindi ho bisogno di includere stdlib.h o cstdlib. Ma non so qual è la differenza. Dovrei usare il file di intestazione di stile cXXX piuttosto che XXX.h?Qual è la differenza principale tra stdlib.h e cstdlib in C++?

Grazie.

+0

Possibile duplicato di [Qual è la differenza tra cstdlib e stdlib.h?] (Http://stackoverflow.com/questions/2900785/whats-the-difference-between-cstdlib-and-stdlib-h) –

+0

Check out la mia risposta aggiornata qui. http://stackoverflow.com/questions/13889467/should-i-include-xxxx-h-or-cxxxx-in-c-programs/43016708#43016708 – 0xDEFACED

risposta

17

Poiché EXIT_FAILURE è una macro, non fa alcuna differenza che includi. La versione cstdlib metterà i nomi di tutte le funzioni in std spazio dei nomi, in modo da poter dire le cose come:

std::exit(0); 

ma come le macro non rispettano gli spazi dei nomi, non si può dire:

std::EXIT_FAILURE 
+0

Grazie, ma posso ancora chiamare 'exit (EXIT_FAILURE)' senza 'std ::' quando includo 'cstdlib'. – Brian

+0

@Brian Sì, la funzione di uscita si troverà sia negli spazi dei nomi globali che in quelli standard, –

+0

Inoltre, alcuni sovraccarichi sono dichiarati per gestire [il problema di constth di strtol()] (http://www.cpptalk.net/strtol- const-ness-problem-vt54984.html) e problemi simili. –

25

<cstdlib> è solo <stdlib.h> nello spazio dei nomi std. Dovresti usare <cstdlib> per mantenere pulito il tuo spazio dei nomi globale.