What's the difference between cstdlib and stdlib.h?

When writing C++ code is there any difference between:

#include <cstdlib>

and

#include <stdlib.h>

other than the former being mostly contained within the std:: namespace?

Is there any reason other than coding standards and style to use one over the other?


The first one is a C++ header and the second is a C header. Since the first uses a namespace, that would seem to be preferable.


No, other than the namespace situation, they're essentially identical.


Is there any reason other than coding standards and style to use one over the other?

Yes. The fact that stdlib.h is deprecated is a very good reason to not use it. It was actually deprecated in the very first standard that came 1998. Sure, it still existed in C++14, and possibly or even probably in C++17 (I don't have access to the C++17 standard) but since it is deprecated it is strong signal that you should not use it. Maybe the risk of removal isn't very high, but why even risk it while writing new code when it is so easy to avoid?

From C++14 standard:

These are deprecated features, where deprecated is defined as: Normative for the current edition of the Standard, but having been identified as a candidate for removal from future revisions.

...

You should have a pretty strong argument to use stdlib.h instead of cstdlib

Apart from that, you also have the practical matter that cstdlib is using a namespace, which is preferable in most cases.