2010-05-17 9 views
16

J'utilise la macro EXIT_FAILURE, donc j'ai besoin d'inclure stdlib.h ou cstdlib. Mais je ne sais pas quelle est la différence. Dois-je utiliser le fichier d'en-tête de style cXXX plutôt que XXX.h?Quelle est la principale différence entre stdlib.h et cstdlib en C++?

Merci.

+0

Copie possible de [Quelle est la différence entre cstdlib et stdlib.h?] (Http://stackoverflow.com/questions/2900785/whats-the-difference-between-cstdlib-and-stdlib-h) –

+0

ma réponse mise à jour ici. http://stackoverflow.com/questions/13889467/should-i-include-xxxx-h-or-cxxxx-in-c-programs/43016708#43016708 – 0xDEFACED

Répondre

17

Comme EXIT_FAILURE est une macro, cela ne fait aucune différence. La version cstdlib mettra les noms de toutes les fonctions dans l'espace de noms std, donc vous pouvez dire des choses comme:

std::exit(0); 

mais comme les macros ne respectent pas les espaces de noms, vous ne pouvez pas dire:

std::EXIT_FAILURE 
+0

Merci, mais je peux toujours appeler 'exit (EXIT_FAILURE)' sans 'std ::' quand j'inclus 'cstdlib'. – Brian

+0

@Brian Oui, la fonction de sortie sera dans les espaces de noms global et std, –

+0

En outre, certaines surcharges sont déclarées pour faire face à [problème constness de strtol()] (http://www.cpptalk.net/strtol- const-ness-problem-vt54984.html) et des problèmes similaires. –

25

<cstdlib> est juste <stdlib.h> enveloppé dans l'espace de noms std. Vous devriez utiliser <cstdlib> afin de garder votre espace de nom global propre.

Questions connexes