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_Pragmaabortabsacosacosacosfacoshacoshacoshfacoshlacoslandand_eqasctimeasinasinasinfasinhasinhasinhfasinhlasinlassertatanatanatan2atan2atan2fatan2latanfatanhatanhatanhfatanhlatanlatexitatofatoiatolatollautoBUFSIZbitandbitorboolbreakbreakbreakbsearchbtowcCHAR_BIT CHAR_MAX CHAR_MIN CLOCKS_PER_ SEC CX_LIMITED_ RANGE cabscabsfcabslcacoscacosfcacoshcacoshfcacoshlcacoslcalloccargcargcargfcarglcasecasincasinfcasinhcasinhfcasinhlcasinlcatancatanfcatanhcatanhfcatanhlcatanlcbrtcbrtcbrtfcbrtlccosccosfccoshccoshfccoshlccoslceilceilceilfceillcexpcexpfcexplcharcharcimagcimagcimagfcimaglclearerrclockclock_tclogclogfcloglcomplcomplexconjconjconjfconjlconstcontinuecopysigncopysigncopysignfcopysignlcoscoscosfcoshcoshcoshfcoshlcoslcpowcpowfcpowlcprojcprojcprojfcprojlcrealcrealcrealfcreallcsincsinfcsinhcsinhfcsinhlcsinlcsqrtcsqrtfcsqrtlctanctanfctanhctanhfctanhlctanlctimeDBL_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 defaultdefaultdefineddifftimedivdiv_tdodoubledoubledouble _Complexdouble _Imaginarydouble complexdouble imaginarydouble_tEDOMEILSEQEOFERANGEEXIT_FAILURE EXIT_SUCCESS elseenumerferferfcerfcerfcferfclerfferflerrnoexitexpexpexp2exp2exp2fexp2lexpfexplexpm1expm1expm1fexpm1lexternFE_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 fabsfabsfabsffabslfalsefclosefdimfdimfdimffdimlfeclearexceptfegetenvfegetexceptflagfegetroundfeholdexceptfenv_tfeofferaiseexceptferrorfesetenvfesetexceptflagfesetroundfetestexceptfeupdateenvfexcept_tfflushfgetcfgetposfgetsfgetwcfgetwsfloatfloatfloat _Complexfloat _Imaginaryfloat complexfloat imaginaryfloat_tfloorfloorfloorffloorlfmafmafmaffmalfmaxfmaxfmaxffmaxlfminfminfminffminlfmodfmodfmodffmodlfopenforfpclassifyfpos_tfprintffputcfputsfputwcfputwsfreadfreefreopenfrexpfrexpfrexpffrexplfscanffseekfsetposftellfwidefwprintffwritefwscanfgetcgetchargetenvgetsgetwcgetwchargmtimegotoHUGE_VAL HUGE_VALF HUGE_VALL hypothypothypotfhypotlIINFINITYINT16_CINT16_MAX INT16_MIN INT32_CINT32_MAX INT32_MIN INT64_CINT64_MAX INT64_MIN INT8_CINT8_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_CINTMAX_MAX INTMAX_MIN INTPTR_MAX INTPTR_MIN ifilogbilogbilogbfilogblimaginaryimaxdivimaxdiv_tinlineintintint16_tint32_tint64_tint8_tint_fast16_t int_fast32_t int_fast64_t int_fast8_t int_least16_t int_least32_t int_least64_t int_least8_t intmax_tintptr_tisalnumisalphaisblankiscntrlisdigitisfiniteisgraphisgreaterisgreaterequalisinfislessislessequalislessgreaterislowerisnanisnormalisprintispunctisspaceisunorderedisupperiswalnumiswalphaiswblankiswcntrliswctypeiswdigitiswgraphiswloweriswprintiswpunctiswspaceiswupperiswxdigitisxdigitjmp_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 labsldexpldexpldexpfldexplldivldiv_tlgammalgammalgammaflgammalllabslldivlldiv_tllrintllrintllrintfllrintlllroundllroundllroundfllroundllocaleconvlocaltimelogloglog10log10log10flog10llog1plog1plog1pflog1pllog2log2log2flog2llogblogblogbflogbllogflogllonglonglong doublelong double _Complexlong double _Imaginarylong double complexlong double imaginarylong longlongjmplrintlrintlrintflrintllroundlroundlroundflroundlMB_CUR_ MAX MB_LEN_ MAX mainmallocmblenmbrlenmbrtowcmbsinitmbsrtowcsmbstate_tmbstowcsmbtowcmemchrmemcmpmemcpymemmovememsetmktimemodfmodfmodffmodflNANNDEBUGNULLnannanfnanlnearbyintnearbyintnearbyintfnearbyintlnextafternextafternextafterfnextafterlnexttowardnexttowardnexttowardfnexttowardlnotnot_eqoffsetoforor_eqPRId16PRId32PRId64PRId8PRIdFAST16PRIdFAST32PRIdFAST64PRIdFAST8PRIdLEAST16PRIdLEAST32PRIdLEAST64PRIdLEAST8PRIdMAXPRIdPTRPRIi16PRIi32PRIi64PRIi8PRIiFAST16PRIiFAST32PRIiFAST64PRIiFAST8PRIiLEAST16PRIiLEAST32PRIiLEAST64PRIiLEAST8PRIiMAXPRIiPTRPRIo16PRIo32PRIo64PRIo8PRIoFAST16PRIoFAST32PRIoFAST64PRIoFAST8PRIoLEAST16PRIoLEAST32PRIoLEAST64PRIoLEAST8PRIoMAXPRIoPTRPRIu16PRIu32PRIu64PRIu8PRIuFAST16PRIuFAST32PRIuFAST64PRIuFAST8PRIuLEAST16PRIuLEAST32PRIuLEAST64PRIuLEAST8PRIuMAXPRIuPTRPRIX16PRIX32PRIX64PRIX8PRIXFAST16PRIXFAST32PRIXFAST64PRIXFAST8PRIXLEAST16PRIXLEAST32PRIXLEAST64PRIXLEAST8PRIXMAXPRIXPTRPRIx16PRIx32PRIx64PRIx8PRIxFAST16PRIxFAST32PRIxFAST64PRIxFAST8PRIxLEAST16PRIxLEAST32PRIxLEAST64PRIxLEAST8PRIxMAXPRIxPTRPTRDIFF_MAX PTRDIFF_MIN perrorpowpowpowfpowlprintfptrdiff_tputcputcharputsputwcputwcharqsortRAND_MAX raiserandreallocregisterremainderremainderremainderfremainderlremoveremquoremquoremquofremquolrenamerestrictreturnrewindrintrintrintfrintlroundroundroundfroundlSCHAR_MAX SCHAR_MIN SCNd16SCNd32SCNd64SCNd8SCNdFAST16SCNdFAST32SCNdFAST64SCNdFAST8SCNdLEAST16SCNdLEAST32SCNdLEAST64SCNdLEAST8SCNdMAXSCNdPTRSCNi16SCNi32SCNi64SCNi8SCNiFAST16SCNiFAST32SCNiFAST64SCNiFAST8SCNiLEAST16SCNiLEAST32SCNiLEAST64SCNiLEAST8SCNiMAXSCNiPTRSCNo16SCNo32SCNo64SCNo8SCNoFAST16SCNoFAST32SCNoFAST64SCNoFAST8SCNoLEAST16SCNoLEAST32SCNoLEAST64SCNoLEAST8SCNoMAXSCNoPTRSCNu16SCNu32SCNu64SCNu8SCNuFAST16SCNuFAST32SCNuFAST64SCNuFAST8SCNuLEAST16SCNuLEAST32SCNuLEAST64SCNuLEAST8SCNuMAXSCNuPTRSCNx16SCNx32SCNx64SCNx8SCNxFAST16SCNxFAST32SCNxFAST64SCNxFAST8SCNxLEAST16SCNxLEAST32SCNxLEAST64SCNxLEAST8SCNxMAXSCNxPTRSEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIG_ATOMIC_ MAX SIG_ATOMIC_ MIN SIG_DFL SIG_ERR SIG_IGN SIGABRTSIGFPESIGILLSIGINTSIGSEGVSIGTERMSIZE_MAX scalblnscalblnscalblnfscalblnlscalbnscalbnscalbnfscalbnlscanfsetbufsetjmpsetlocalesetvbufshortshortsig_atomic_t signalsignbitsignedsigned charsinsinsinfsinhsinhsinhfsinhlsinlsize_tsizeofsnprintfsprintfsqrtsqrtsqrtfsqrtlsrandsscanfstaticstaticstaticstaticstaticstderrstdinstdoutstrcatstrchrstrcmpstrcollstrcpystrcspnstrerrorstrftimestrlenstrncatstrncmpstrncpystrpbrkstrrchrstrspnstrstrstrtodstrtofstrtoimaxstrtokstrtolstrtoldstrtollstrtoulstrtoullstrtoumaxstructstruct lconvstruct tmstrxfrmswitchswprintfswscanfsystemTMP_MAX tantantanftanhtanhtanhftanhltanltgammatgammatgammaftgammaltimetime_ttmpfiletmpnamtolowertouppertowctranstowlowertowuppertruetrunctrunctruncftruncltypedefUCHAR_MAX UINT16_CUINT16_MAX UINT32_CUINT32_MAX UINT64_CUINT64_MAX UINT8_CUINT8_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_CUINTMAX_MAX UINTPTR_MAX ULLONG_MAX ULONG_MAX USHRT_MAX uint16_tuint32_tuint64_tuint8_tuint_fast16_t uint_fast32_t uint_fast64_t uint_fast8_t uint_least16_t uint_least32_t uint_least64_t uint_least8_t uintmax_tuintptr_tungetcungetwcunionunsignedunsignedunsigned charunsigned longunsigned long longunsigned shortva_arg va_copy va_end va_list va_start vfprintfvfscanfvfwprintfvfwscanfvoidvoidvoidvoidvoid *volatilevprintfvscanfvsnprintfvsprintfvsscanfvswprintfvswscanfvwprintfvwscanfWCHAR_MAX WCHAR_MIN WEOFWINT_MAX WINT_MIN wchar_twcrtombwcscatwcschrwcscmpwcscollwcscpywcscspnwcsftimewcslenwcsncatwcsncmpwcsncpywcspbrkwcsrchrwcsrtombswcsspnwcsstrwcstodwcstofwcstoimaxwcstokwcstolwcstoldwcstollwcstombswcstoulwcstoullwcstoumaxwcsxfrmwctobwctombwctranswctrans_twctypewctype_twhilewint_twmemchrwmemcmpwmemcpywmemmovewmemsetwprintfwscanfxorxor_eq