Compare with earlier versions:
Compare with later versions:
C99 defines 24 standard headers and specifies 1058 names. Among them, the macro
__STDC_
expands to
199901L
.
This standard extended the library substantially and added several language features.
inline
was introduced,
stolen from C++. Making a function in-line suggests that the
compiler should try to embed the function's implementation
directly in the calling code, thus avoiding the overhead of a
function call.
restrict
type qualification
was introduced to permit optimisation of indirection. A
restrict
-qualified pointer
type indicates that the referenced object will not change
unexpectedly due to things outside a function's control (such
as a call to another function).
C++ block structure was adopted in the grammar of block statements.
Array . Multidimensional arrays and their dimensions can be passed as arguments. Specific array elements can be initialised. Variable-length arrays may appear at the end of structures. Specific structure members can be initialised.
The header <complex.h>
was
introduced to provide arithmetic types for complex and
imaginary numbers and their associated mathematical
operations.
The header <math.h>
was greatly
extended with new operations and variations for each
floating-point type.
The header <tgmath.h>
was introduced
to provide type-generic mathematical operations.
The headers <stdint.h>
and
<inttypes.h>
were introduced to provide integer types with special
characteristics. For example, int_
is the
narrowest signed integer type with at least 32 usable bits,
and PRIdLEAST32
is the
conversion specifier used to print a value of this type.
The header <stdbool.h>
was introduced
to provide a boolean type.
The header <fenv.h>
was introduced to
provide portable access to the floating-point
environment.
A program can identify an environment conforming at least
to C99 by the presence of
__STDC__
with the value
1
and the presence of __STDC_
with the
minimum value 199901L
. It can further
determine that it does not conform to any later version by
detecting that exact value.
Headers defined in C99
Names specified in C99
#
##
#define
#elif
#else
#endif
#error
#if
#ifdef
#ifndef
#include
#line
#pragma
#undef
__bool_
true_ false_ are_ defined __DATE__
__FILE__
__func__
__LINE__
__STDC__
__STDC_
HOSTED__ __STDC_
IEC_ 559__ __STDC_
IEC_ 559_ COMPLEX__ __STDC_
ISO_ 10646__ __STDC_
NO_ COMPLEX__ __STDC_
NO_ VLA__ __STDC_
VERSION__ __TIME__
__VA_
ARGS__ _Bool
_Complex
_Complex_I
_Exit
_Imaginary
_Imaginary_I
_IOFBF
_IOLBF
_IONBF
_Pragma
abort
abs
acos
acos
acosf
acosh
acosh
acoshf
acoshl
acosl
and
and_eq
asctime
asin
asin
asinf
asinh
asinh
asinhf
asinhl
asinl
assert
atan
atan
atan2
atan2
atan2f
atan2l
atanf
atanh
atanh
atanhf
atanhl
atanl
atexit
atof
atoi
atol
atoll
auto
BUFSIZ
bitand
bitor
bool
break
break
break
bsearch
btowc
CHAR_
BIT CHAR_
MAX CHAR_
MIN CLOCKS_
PER_ SEC CX_
LIMITED_ RANGE cabs
cabsf
cabsl
cacos
cacosf
cacosh
cacoshf
cacoshl
cacosl
calloc
carg
carg
cargf
cargl
case
casin
casinf
casinh
casinhf
casinhl
casinl
catan
catanf
catanh
catanhf
catanhl
catanl
cbrt
cbrt
cbrtf
cbrtl
ccos
ccosf
ccosh
ccoshf
ccoshl
ccosl
ceil
ceil
ceilf
ceill
cexp
cexpf
cexpl
char
char
cimag
cimag
cimagf
cimagl
clearerr
clock
clock_t
clog
clogf
clogl
compl
complex
conj
conj
conjf
conjl
const
continue
copysign
copysign
copysignf
copysignl
cos
cos
cosf
cosh
cosh
coshf
coshl
cosl
cpow
cpowf
cpowl
cproj
cproj
cprojf
cprojl
creal
creal
crealf
creall
csin
csinf
csinh
csinhf
csinhl
csinl
csqrt
csqrtf
csqrtl
ctan
ctanf
ctanh
ctanhf
ctanhl
ctanl
ctime
DBL_
DECIMAL_ DIG DBL_
DIG DBL_
EPSILON DBL_
MANT_ DIG DBL_
MAX DBL_
MAX_ 10_ EXP DBL_
MAX_ EXP DBL_
MIN DBL_
MIN_ 10_ EXP DBL_
MIN_ EXP DECIMAL_
DIG default
default
defined
difftime
div
div_t
do
double
double
double _Complex
double _Imaginary
double complex
double imaginary
double_t
EDOM
EILSEQ
EOF
ERANGE
EXIT_
FAILURE EXIT_
SUCCESS else
enum
erf
erf
erfc
erfc
erfcf
erfcl
erff
erfl
errno
exit
exp
exp
exp2
exp2
exp2f
exp2l
expf
expl
expm1
expm1
expm1f
expm1l
extern
FE_
ALL_ EXCEPT FE_
DFL_ ENV FE_
DIVBYZERO FE_
DOWNWARD FE_
INEXACT FE_
INVALID FE_
OVERFLOW FE_
TONEAREST FE_
TOWARDZERO FE_
UNDERFLOW FE_
UPWARD FENV_
ACCESS FILE *
FILENAME_
MAX FLT_
DECIMAL_ DIG FLT_
DIG FLT_
EPSILON FLT_
EVAL_ METHOD FLT_
MANT_ DIG FLT_
MAX FLT_
MAX_ 10_ EXP FLT_
MAX_ EXP FLT_
MIN FLT_
MIN_ 10_ EXP FLT_
MIN_ EXP FLT_
RADIX FLT_
ROUNDS FOPEN_
MAX FP_
CONTRACT FP_
FAST_ FMA FP_
FAST_ FMAF FP_
FAST_ FMAL FP_
ILOGB0 FP_
ILOGBNAN FP_
INFINITE FP_
NAN FP_
NORMAL FP_
SUBNORMAL FP_
ZERO fabs
fabs
fabsf
fabsl
false
fclose
fdim
fdim
fdimf
fdiml
feclearexcept
fegetenv
fegetexceptflag
fegetround
feholdexcept
fenv_t
feof
feraiseexcept
ferror
fesetenv
fesetexceptflag
fesetround
fetestexcept
feupdateenv
fexcept_t
fflush
fgetc
fgetpos
fgets
fgetwc
fgetws
float
float
float _Complex
float _Imaginary
float complex
float imaginary
float_t
floor
floor
floorf
floorl
fma
fma
fmaf
fmal
fmax
fmax
fmaxf
fmaxl
fmin
fmin
fminf
fminl
fmod
fmod
fmodf
fmodl
fopen
for
fpclassify
fpos_t
fprintf
fputc
fputs
fputwc
fputws
fread
free
freopen
frexp
frexp
frexpf
frexpl
fscanf
fseek
fsetpos
ftell
fwide
fwprintf
fwrite
fwscanf
getc
getchar
getenv
gets
getwc
getwchar
gmtime
goto
HUGE_
VAL HUGE_
VALF HUGE_
VALL hypot
hypot
hypotf
hypotl
I
INFINITY
INT16_C
INT16_
MAX INT16_
MIN INT32_C
INT32_
MAX INT32_
MIN INT64_C
INT64_
MAX INT64_
MIN INT8_C
INT8_
MAX INT8_
MIN INT_
FAST16_ MAX INT_
FAST16_ MIN INT_
FAST32_ MAX INT_
FAST32_ MIN INT_
FAST64_ MAX INT_
FAST64_ MIN INT_
FAST8_ MAX INT_
FAST8_ MIN INT_
LEAST16_ MAX INT_
LEAST16_ MIN INT_
LEAST32_ MAX INT_
LEAST32_ MIN INT_
LEAST64_ MAX INT_
LEAST64_ MIN INT_
LEAST8_ MAX INT_
LEAST8_ MIN INT_
MAX INT_
MIN INTMAX_C
INTMAX_
MAX INTMAX_
MIN INTPTR_
MAX INTPTR_
MIN if
ilogb
ilogb
ilogbf
ilogbl
imaginary
imaxdiv
imaxdiv_t
inline
int
int
int16_t
int32_t
int64_t
int8_t
int_
fast16_t int_
fast32_t int_
fast64_t int_
fast8_t int_
least16_t int_
least32_t int_
least64_t int_
least8_t intmax_t
intptr_t
isalnum
isalpha
isblank
iscntrl
isdigit
isfinite
isgraph
isgreater
isgreaterequal
isinf
isless
islessequal
islessgreater
islower
isnan
isnormal
isprint
ispunct
isspace
isunordered
isupper
iswalnum
iswalpha
iswblank
iswcntrl
iswctype
iswdigit
iswgraph
iswlower
iswprint
iswpunct
iswspace
iswupper
iswxdigit
isxdigit
jmp_
buf L_
tmpnam LC_
ALL LC_
COLLATE LC_
CTYPE LC_
MONETARY LC_
NUMERIC LC_
TIME LDBL_
DECIMAL_ DIG LDBL_
DIG LDBL_
EPSILON LDBL_
MANT_ DIG LDBL_
MAX LDBL_
MAX_ 10_ EXP LDBL_
MAX_ EXP LDBL_
MIN LDBL_
MIN_ 10_ EXP LDBL_
MIN_ EXP LLONG_
MAX LLONG_
MIN LONG_
MAX LONG_
MIN labs
ldexp
ldexp
ldexpf
ldexpl
ldiv
ldiv_t
lgamma
lgamma
lgammaf
lgammal
llabs
lldiv
lldiv_t
llrint
llrint
llrintf
llrintl
llround
llround
llroundf
llroundl
localeconv
localtime
log
log
log10
log10
log10f
log10l
log1p
log1p
log1pf
log1pl
log2
log2
log2f
log2l
logb
logb
logbf
logbl
logf
logl
long
long
long double
long double _Complex
long double _Imaginary
long double complex
long double imaginary
long long
longjmp
lrint
lrint
lrintf
lrintl
lround
lround
lroundf
lroundl
MB_
CUR_ MAX MB_
LEN_ MAX main
malloc
mblen
mbrlen
mbrtowc
mbsinit
mbsrtowcs
mbstate_t
mbstowcs
mbtowc
memchr
memcmp
memcpy
memmove
memset
mktime
modf
modf
modff
modfl
NAN
NDEBUG
NULL
nan
nanf
nanl
nearbyint
nearbyint
nearbyintf
nearbyintl
nextafter
nextafter
nextafterf
nextafterl
nexttoward
nexttoward
nexttowardf
nexttowardl
not
not_eq
offsetof
or
or_eq
PRId16
PRId32
PRId64
PRId8
PRIdFAST16
PRIdFAST32
PRIdFAST64
PRIdFAST8
PRIdLEAST16
PRIdLEAST32
PRIdLEAST64
PRIdLEAST8
PRIdMAX
PRIdPTR
PRIi16
PRIi32
PRIi64
PRIi8
PRIiFAST16
PRIiFAST32
PRIiFAST64
PRIiFAST8
PRIiLEAST16
PRIiLEAST32
PRIiLEAST64
PRIiLEAST8
PRIiMAX
PRIiPTR
PRIo16
PRIo32
PRIo64
PRIo8
PRIoFAST16
PRIoFAST32
PRIoFAST64
PRIoFAST8
PRIoLEAST16
PRIoLEAST32
PRIoLEAST64
PRIoLEAST8
PRIoMAX
PRIoPTR
PRIu16
PRIu32
PRIu64
PRIu8
PRIuFAST16
PRIuFAST32
PRIuFAST64
PRIuFAST8
PRIuLEAST16
PRIuLEAST32
PRIuLEAST64
PRIuLEAST8
PRIuMAX
PRIuPTR
PRIX16
PRIX32
PRIX64
PRIX8
PRIXFAST16
PRIXFAST32
PRIXFAST64
PRIXFAST8
PRIXLEAST16
PRIXLEAST32
PRIXLEAST64
PRIXLEAST8
PRIXMAX
PRIXPTR
PRIx16
PRIx32
PRIx64
PRIx8
PRIxFAST16
PRIxFAST32
PRIxFAST64
PRIxFAST8
PRIxLEAST16
PRIxLEAST32
PRIxLEAST64
PRIxLEAST8
PRIxMAX
PRIxPTR
PTRDIFF_
MAX PTRDIFF_
MIN perror
pow
pow
powf
powl
printf
ptrdiff_t
putc
putchar
puts
putwc
putwchar
qsort
RAND_
MAX raise
rand
realloc
register
remainder
remainder
remainderf
remainderl
remove
remquo
remquo
remquof
remquol
rename
restrict
return
rewind
rint
rint
rintf
rintl
round
round
roundf
roundl
SCHAR_
MAX SCHAR_
MIN SCNd16
SCNd32
SCNd64
SCNd8
SCNdFAST16
SCNdFAST32
SCNdFAST64
SCNdFAST8
SCNdLEAST16
SCNdLEAST32
SCNdLEAST64
SCNdLEAST8
SCNdMAX
SCNdPTR
SCNi16
SCNi32
SCNi64
SCNi8
SCNiFAST16
SCNiFAST32
SCNiFAST64
SCNiFAST8
SCNiLEAST16
SCNiLEAST32
SCNiLEAST64
SCNiLEAST8
SCNiMAX
SCNiPTR
SCNo16
SCNo32
SCNo64
SCNo8
SCNoFAST16
SCNoFAST32
SCNoFAST64
SCNoFAST8
SCNoLEAST16
SCNoLEAST32
SCNoLEAST64
SCNoLEAST8
SCNoMAX
SCNoPTR
SCNu16
SCNu32
SCNu64
SCNu8
SCNuFAST16
SCNuFAST32
SCNuFAST64
SCNuFAST8
SCNuLEAST16
SCNuLEAST32
SCNuLEAST64
SCNuLEAST8
SCNuMAX
SCNuPTR
SCNx16
SCNx32
SCNx64
SCNx8
SCNxFAST16
SCNxFAST32
SCNxFAST64
SCNxFAST8
SCNxLEAST16
SCNxLEAST32
SCNxLEAST64
SCNxLEAST8
SCNxMAX
SCNxPTR
SEEK_
CUR SEEK_
END SEEK_
SET SHRT_
MAX SHRT_
MIN SIG_
ATOMIC_ MAX SIG_
ATOMIC_ MIN SIG_
DFL SIG_
ERR SIG_
IGN SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
SIZE_
MAX scalbln
scalbln
scalblnf
scalblnl
scalbn
scalbn
scalbnf
scalbnl
scanf
setbuf
setjmp
setlocale
setvbuf
short
short
sig_
atomic_t signal
signbit
signed
signed char
sin
sin
sinf
sinh
sinh
sinhf
sinhl
sinl
size_t
sizeof
snprintf
sprintf
sqrt
sqrt
sqrtf
sqrtl
srand
sscanf
static
static
static
static
static
stderr
stdin
stdout
strcat
strchr
strcmp
strcoll
strcpy
strcspn
strerror
strftime
strlen
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strtod
strtof
strtoimax
strtok
strtol
strtold
strtoll
strtoul
strtoull
strtoumax
struct
struct lconv
struct tm
strxfrm
switch
swprintf
swscanf
system
TMP_
MAX tan
tan
tanf
tanh
tanh
tanhf
tanhl
tanl
tgamma
tgamma
tgammaf
tgammal
time
time_t
tmpfile
tmpnam
tolower
toupper
towctrans
towlower
towupper
true
trunc
trunc
truncf
truncl
typedef
UCHAR_
MAX UINT16_C
UINT16_
MAX UINT32_C
UINT32_
MAX UINT64_C
UINT64_
MAX UINT8_C
UINT8_
MAX UINT_
FAST16_ MAX UINT_
FAST32_ MAX UINT_
FAST64_ MAX UINT_
FAST8_ MAX UINT_
LEAST16_ MAX UINT_
LEAST32_ MAX UINT_
LEAST64_ MAX UINT_
LEAST8_ MAX UINT_
MAX UINTMAX_C
UINTMAX_
MAX UINTPTR_
MAX ULLONG_
MAX ULONG_
MAX USHRT_
MAX uint16_t
uint32_t
uint64_t
uint8_t
uint_
fast16_t uint_
fast32_t uint_
fast64_t uint_
fast8_t uint_
least16_t uint_
least32_t uint_
least64_t uint_
least8_t uintmax_t
uintptr_t
ungetc
ungetwc
union
unsigned
unsigned
unsigned char
unsigned long
unsigned long long
unsigned short
va_
arg va_
copy va_
end va_
list va_
start vfprintf
vfscanf
vfwprintf
vfwscanf
void
void
void
void
void *
volatile
vprintf
vscanf
vsnprintf
vsprintf
vsscanf
vswprintf
vswscanf
vwprintf
vwscanf
WCHAR_
MAX WCHAR_
MIN WEOF
WINT_
MAX WINT_
MIN wchar_t
wcrtomb
wcscat
wcschr
wcscmp
wcscoll
wcscpy
wcscspn
wcsftime
wcslen
wcsncat
wcsncmp
wcsncpy
wcspbrk
wcsrchr
wcsrtombs
wcsspn
wcsstr
wcstod
wcstof
wcstoimax
wcstok
wcstol
wcstold
wcstoll
wcstombs
wcstoul
wcstoull
wcstoumax
wcsxfrm
wctob
wctomb
wctrans
wctrans_t
wctype
wctype_t
while
wint_t
wmemchr
wmemcmp
wmemcpy
wmemmove
wmemset
wprintf
wscanf
xor
xor_eq