This subclause summarizes the explicit changes in headers, definitions, declarations, or behavior between the C standard library in the C standard and the parts of the C++ standard library that were included from the C standard library.
For compatibility with the C standard library, the C++ standard library provides the C headers enumerated in [depr.c.headers], but their use is deprecated in C++.
There are no C++ headers for the C headers <stdatomic.h>, <stdnoreturn.h>, and <threads.h>, nor are the C headers themselves part of C++.
The headers <ccomplex> ([ccomplex.syn]) and <ctgmath> ([ctgmath.syn]), as well as their corresponding C headers <complex.h> and <tgmath.h>, do not contain any of the content from the C standard library and instead merely include other headers from the C++ standard library.
The headers <ciso646>, <cstdalign> ([cstdalign.syn]), and <cstdbool> ([cstdbool.syn]) are meaningless in C++. Use of the C++ headers <ccomplex>, <cstdalign>, <cstdbool>, and <ctgmath> is deprecated ([depr.c.headers]).
The types char16_t and char32_t are distinct types rather than typedefs to existing integral types. The tokens char16_t and char32_t are keywords in this International Standard ([lex.key]). They do not appear as macro names defined in <cuchar> ([cuchar.syn]).
The type wchar_t is a distinct type rather than a typedef to an existing integral type. The token wchar_t is a keyword in this International Standard ([lex.key]). It does not appear as a type name defined in any of <cstddef> ([cstddef.syn]), <cstdlib> ([cstdlib.syn]), or <cwchar> ([cwchar.syn]).
The token static_assert is a keyword in this International Standard ([lex.key]). It does not appear as a macro name defined in <cassert> ([cassert.syn]).
The token alignas is a keyword in this International Standard ([lex.key]). It does not appear as a macro name defined in <cstdalign> ([cstdalign.syn]).
The tokens bool, true, and false are keywords in this International Standard ([lex.key]). They do not appear as macro names defined in <cstdbool> ([cstdbool.syn]).
The macro NULL, defined in any of <clocale> ([c.locales]), <cstddef> ([cstddef.syn]), <cstdio> ([cstdio.syn]), <cstdlib> ([cstdlib.syn]), <cstring> ([cstring.syn]), <ctime> ([ctime.syn]), or <cwchar> ([cwchar.syn]), is an implementation-defined C++ null pointer constant in this International Standard ([support.types]).
Header <cstring> ([cstring.syn]): The following functions have different declarations:
strchr
strpbrk
strrchr
strstr
memchr
Subclause [cstring.syn] describes the changes.
Header <cwchar> ([cwchar.syn]): The following functions have different declarations:
wcschr
wcspbrk
wcsrchr
wcsstr
wmemchr
Subclause [cwchar.syn] describes the changes.
Header <cstddef> ([cstddef.syn]) declares the name nullptr_t in addition to the names declared in <stddef.h> in the C standard library.
Header <cstdlib> ([cstdlib.syn]): The following functions have different behavior:
atexit
exit
abort
Subclause [support.start.term] describes the changes.
Header <csetjmp> ([csetjmp.syn]): The following functions have different behavior:
longjmp
Subclause [csetjmp.syn] describes the changes.
The macro offsetof, defined in <cstddef> ([cstddef.syn]), accepts a restricted set of type arguments in this International Standard. Subclause [support.types.layout] describes the change.
The functions aligned_alloc, calloc, malloc, and realloc are restricted in this International Standard. Subclause [c.malloc] describes the changes.