Which header should I include for `size_t`?

largest_prime_is_463035818 picture largest_prime_is_463035818 · Apr 13, 2016 · Viewed 59.2k times · Source

According to cppreference.com size_t is defined in several headers, namely

<cstddef>
<cstdio>
<cstring>
<ctime>

And, since C++11, also in

<cstdlib>
<cwchar> 

First of all I wonder why this is the case. Isn't this in contradiction to the DRY principle? However, my question is:

Which one of the above headers should I include to use size_t? Does it matter at all?

Answer

Sean picture Sean · Apr 13, 2016

Assuming I wanted to minimize the functions and types I was importing I'd go with cstddef as it doesn't declare any functions and only declares 6 types. The others focus on particular domains (strings, time, IO) that may not matter to you.

Note that cstddef only guarantees to define std::size_t, that is, defining size_t in namespace std, although it may provide this name also in the global namespace (effectively, plain size_t).

In contrast, stddef.h (which is also a header available in C) guarantees to define size_t in the global namespace, and may also provide std::size_t.