web-dev-qa-db-fra.com

Quelle est la différence entre cstdlib et stdlib.h?

Lors de l'écriture de code C++, y a-t-il une différence entre:

#include <cstdlib>

et

#include <stdlib.h>

autre que le premier étant principalement contenu dans le std:: espace de noms?

Y a-t-il une raison autre que les normes et le style de codage pour les utiliser les uns par rapport aux autres?

50
Free Wildebeest

Le premier est un en-tête C++ et le second est un en-tête C. Étant donné que le premier utilise un espace de noms, cela semble préférable.

45
Brendan Long

Non, à part la situation de l'espace de noms, ils sont essentiellement identiques.

15
Jerry Coffin

Y a-t-il une raison autre que les normes et le style de codage pour les utiliser les uns par rapport aux autres?

Oui. Le fait que stdlib.h est obsolète est une très bonne raison de ne pas l'utiliser. Il était en fait obsolète dans la toute première norme venue en 1998. Bien sûr, il existait toujours en C++ 14, et probablement ou même probablement en C++ 17 (je n'ai pas accès à la norme C++ 17) mais comme il est obsolète, c'est un signal fort que vous ne devez pas l'utiliser. Peut-être que le risque de suppression n'est pas très élevé, mais pourquoi même le risquer lors de l'écriture de nouveau code alors qu'il est si facile à éviter?

De norme C++ 14 :

Ce sont des fonctionnalités obsolètes, où obsolète est défini comme suit: normatif pour l'édition actuelle de la norme, mais ayant été identifié comme un candidat à supprimer des futures révisions.

...

Vous devriez avoir un argument assez fort pour utiliser stdlib.h au lieu de cstdlib

3
klutt