In C89 there're 15 header files:
<assert.h> <locale.h> <stddef.h> <ctype.h> <math.h>
<stdio.h> <errno.h> <setjmp.h> <stdlib.h> <float.h>
<signal.h> <string.h> <limits.h> <stdarg.h> <time.h>
What about the c++ standard?
In C89 there're 15 header files:
<assert.h> <locale.h> <stddef.h> <ctype.h> <math.h>
<stdio.h> <errno.h> <setjmp.h> <stdlib.h> <float.h>
<signal.h> <string.h> <limits.h> <stdarg.h> <time.h>
What about the c++ standard?
33 C++-specific ones:
<algorithm> <iomanip> <list> <queue> <streambuf>
<bitset> <ios> <locale> <set> <string>
<complex> <iosfwd> <map> <sstream> <typeinfo>
<deque> <iostream> <memory> <stack> <utility>
<exception> <istream> <new> <stdexcept> <valarray>
<fstream> <iterator> <numeric> <strstream> <vector>
<functional> <limits> <ostream>
Plus the 18 borrowed from C:
<cassert> <ciso646> <csetjmp> <cstdio> <ctime>
<cctype> <climits> <csignal> <cstdlib> <cwchar>
<cerrno> <clocale> <cstdarg> <cstring> <cwctype>
<cfloat> <cmath> <cstddef>
(<iso646.h>
, <wchar.h>
, and <wctype.h>
were added to the C standard in 1995)
The standard does not specify that the standard headers are even implemented as files at all. Take, <iostream>
for example: this need not correspond to a file on disc (as hinted at by the lack of .h
file name extension). Any appropriate (where appropriateness is determined by the vendor) persistence mechanism may be employed. Furthermore, any library vendor may choose to break up the headers into arbitrary subunits in any way that he sees fit as long as the same interface is exposed.