{"id":1303,"date":"2013-07-19T11:26:00","date_gmt":"2013-07-19T11:26:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2013\/07\/19\/c99-library-support-in-visual-studio-2013\/"},"modified":"2019-02-18T18:40:58","modified_gmt":"2019-02-18T18:40:58","slug":"c99-library-support-in-visual-studio-2013","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/c99-library-support-in-visual-studio-2013\/","title":{"rendered":"C99 library support in Visual Studio 2013"},"content":{"rendered":"<p>Hello, I&rsquo;m Pat Brenner, a developer on the Visual C++ Libraries team. In this blog post I want to share some information about the C99 support added to the C run-time library in Visual Studio 2013.<\/p>\n<p>To summarize, we added declarations and implementations for missing functions in the following headers: math.h, ctype.h, wctype.h, stdio.h, stdlib.h, and wchar.h. We also added the new headers complex.h, stdbool.h, fenv.h, and inttypes.h, and added the implementations for all the functions declared in them. In addition, we added the new C++ wrapper headers (ccomplex, cfenv, cinttypes, ctgmath) and updated a number of others (ccomplex, cctype, clocale, cmath, cstdint, cstdio, cstring, cwchar, and cwctype).<\/p>\n<p>Most of this work (all the C headers except stdbool.h and fenv.h) was done in time for the Visual Studio 2013 Preview release and is available with it, but the remainder (stdbool.h, fenv.h and the C++ wrapper headers) has been done for Visual Studio 2013 RTM and will be available with that release.<\/p>\n<p>In more detail, these are the declarations and implementations we added, grouped by the headers that declare them:<\/p>\n<ul>\n<li>math.h:&nbsp;<\/li>\n<ul>\n<li>float_t, double_t, fpclassify, isfinite isinf, isnan, isnormal, signbit<\/li>\n<li>HUGE_VALF, HUGE_VALL, INFINITY, NAN, MATH_ERRNO, MATH_ERREXCEPT<\/li>\n<li>FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_ILOGB0, FP_ILOGBNAN<\/li>\n<li>acosh, acoshf, acoshl, asinh, asinhf, asinhl, atanh, atanhf, atanhl<\/li>\n<li>exp2, exp2f, exp2l, expm1, expm1f, expm1l<\/li>\n<li>ilogb, ilogbf, ilogbl, logb, logbf, logbl, log1p, log1pf, log1pl, log2, log2f, log2l<\/li>\n<li>scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl<\/li>\n<li>cbrt, cbrtf, cbrtl, erf, erff, erfl, erfc, erfcf, erfcl<\/li>\n<li>lgamma, lgammaf, lgammal, tgamma, tgammaf, tgammal<\/li>\n<li>nearbyint, nearbyintf, nearbyintl, nan, nanf, nanl<\/li>\n<li>rint, rintf, rintl, lrint, lrintf, lrintl, llrint, llrintf, llrintl<\/li>\n<li>round, roundf, roundl, lround, lroundf, lroundl, llround, llroundf, llroundl<\/li>\n<li>trunc, truncf, truncl, remainder, remainderf, remainder, remquo, remquof, remquol<\/li>\n<li>nextafter, nextafterf, nextafterl, nexttoward, nexttowardf, nexttowardl<\/li>\n<li>fdim, fdimf, fdiml, fmax, fmaxf, fmaxl, fmin, fminf, fminl, fma, fmaf, fmal<\/li>\n<\/ul>\n<li>complex.h:&nbsp;<\/li>\n<ul>\n<li>cacos, cacosf, cacosl, casin, casinf, casinl, catan, catanf, catanl<\/li>\n<li>ccos, ccosf, ccosl, csin, csinf, csinl, ctan, ctanf, ctanl<\/li>\n<li>cacosh, cacoshf, cacoshl, casinh, casinhf, casinhl, catanh, catanhf, catanhl<\/li>\n<li>ccosh, ccoshf, ccoshl, csinh, csinhf, csinhl, ctanh, ctanhf, ctanhl<\/li>\n<li>cexp, cexpf, cexpl, clog, clogf, clogl, cabs, cabsf, cabsl<\/li>\n<li>cpow, cpowf, cpowl, csqrt, csqrtf, csqrtl, carg, cargf, cargl<\/li>\n<li>cimag, cimagf, cimagl, conj, conjf, conjl, cproj, cprojf, cprojl, creal, crealf, creall<\/li>\n<\/ul>\n<li>fenv.h:&nbsp;<\/li>\n<ul>\n<li>fegetenv, fesetenv, feupdateenv, fegetexceptflag, fesetexceptflag<\/li>\n<li>feclearexcept, feholdexcept, fetestexcept, feraiseexcept<\/li>\n<\/ul>\n<li>inttypes.h:<\/li>\n<ul>\n<li>PRIi8, PRIi16, PRIi32, PRIi64, PRIiMAX, PRIiPTR, PRIiLEAST8, PRIiLEAST16, PRIiLEAST32, PRIiLEAST64, PRIiFAST8, PRIiFAST16, PRIiFAST32, PRIiFAST64<\/li>\n<li>PRIo8, PRIo16, PRIo32, PRIo64, PRIoMAX, PRIoPTR, PRIoLEAST8, PRIoLEAST16, PRIoLEAST32, PRIoLEAST64, PRIoFAST8, PRIoFAST16, PRIoFAST32, PRIoFAST64<\/li>\n<li>PRIu8, PRIu16, PRIu32, PRIu64, PRIuMAX, PRIuPTR, PRIuLEAST8, PRIuLEAST16, PRIuLEAST32, PRIuLEAST64, PRIuFAST8, PRIuFAST16, PRIuFAST32, PRIuFAST64<\/li>\n<li>PRIx8, PRIx16, PRIx32, PRIx64, PRIxMAX, PRIxPTR, PRIxLEAST8, PRIxLEAST16, PRIxLEAST32, PRIxLEAST64, PRIxFAST8, PRIxFAST16, PRIxFAST32, PRIxFAST64<\/li>\n<li>PRIX8, PRIX16, PRIX32, PRIX64, PRIXMAX, PRIXPTR, PRIXLEAST8, PRIXLEAST16, PRIXLEAST32, PRIXLEAST64, PRIXFAST8, PRIXFAST16, PRIXFAST32, PRIXFAST64<\/li>\n<li>SCNd8, SCNd16, SCNd32, SCNd64, SCNdMAX, SCNdPTR, SCNdLEAST8, SCNdLEAST16, SCNdLEAST32, SCNdLEAST64, SCNdFAST8, SCNdFAST16, SCNdFAST32, SCNdFAST64<\/li>\n<li>SCNi8, SCNi16, SCNi32, SCNi64, SCNiMAX, SCNiPTR, SCNiLEAST8, SCNiLEAST16, SCNiLEAST32, SCNiLEAST64, SCNiFAST8, SCNiFAST16, SCNiFAST32, SCNiFAST64<\/li>\n<li>SCNo8, SCNo16, SCNo32, SCNo64, SCNoMAX, SCNoPTR, SCNoLEAST8, SCNoLEAST16, SCNoLEAST32, SCNoLEAST64, SCNoFAST8, SCNoFAST16, SCNoFAST32, SCNoFAST64<\/li>\n<li>SCNu8, SCNu16, SCNu32, SCNu64, SCNuMAX, SCNuPTR, SCNuLEAST8, SCNuLEAST16, SCNuLEAST32, SCNuLEAST64, SCNuFAST8, SCNuFAST16, SCNuFAST32, SCNuFAST64<\/li>\n<li>SCNx8, SCNx16, SCNx32, SCNx64, SCNxMAX, SCNxPTR, SCNxLEAST8, SCNxLEAST16, SCNxLEAST32, SCNxLEAST64, SCNxFAST8, SCNxFAST16, SCNxFAST32, SCNxFAST64<\/li>\n<li>SCNX8, SCNX16, SCNX32, SCNX64, SCNXMAX, SCNXPTR, SCNXLEAST8, SCNXLEAST16, SCNXLEAST32, SCNXLEAST64, SCNXFAST8, SCNXFAST16, SCNXFAST32, SCNXFAST64<\/li>\n<li>imaxabs, imaxdiv, strtoimax, strtoumax, wcstoimax, wcstoumax<\/li>\n<\/ul>\n<li>ctype.h<\/li>\n<ul>\n<li>isblank<\/li>\n<\/ul>\n<li>wctype.h<\/li>\n<ul>\n<li>iswblank<\/li>\n<\/ul>\n<li>float.h<\/li>\n<ul>\n<li>DECIMAL_DIG, FLT_EVAL_METHOD<\/li>\n<\/ul>\n<li>stdarg.h<\/li>\n<ul>\n<li>va_copy<\/li>\n<\/ul>\n<li>stdbool.h<\/li>\n<ul>\n<li>bool, true, false, __bool_true_false_are_defined<\/li>\n<\/ul>\n<li>stdio.h<\/li>\n<ul>\n<li>vscanf, vfscanf, vsscanf<\/li>\n<\/ul>\n<li>stdlib.h<\/li>\n<ul>\n<li>atoll, strtof, strtold, strtoll, strtoull<\/li>\n<\/ul>\n<li>wchar.h<\/li>\n<ul>\n<li>vwscanf, vfwscanf, vswscanf, wcstof, wcstold, wcstoll, wcstoull<\/li>\n<\/ul>\n<\/ul>\n<p>We know that this is not complete support for the C99 library functions. To the best of our understanding, the missing pieces are these:<\/p>\n<ul>\n<li>The tgmath.h header is missing. C compiler support is needed for this header.<\/li>\n<ul>\n<li>Note that the ctgmath&nbsp;header was added&mdash;this is possible because that header does not require the tgmath.h header&mdash;only the ccomplex and cmath headers.<\/li>\n<\/ul>\n<li>The uchar.h header is missing. This is from the C Unicode TR.<\/li>\n<li>Several format specifiers in the printf family are not yet supported.<\/li>\n<li>The snprintf and snwprintf functions are missing from stdio.h and wchar.h.<\/li>\n<\/ul>\n<p>I hope you find this information useful. We did all that we had time for, while trying to prioritize those functions we thought most important.<\/p>\n<p>Pat Brenner, Visual C++ Libraries Development Team<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello, I&rsquo;m Pat Brenner, a developer on the Visual C++ Libraries team. In this blog post I want to share some information about the C99 support added to the C run-time library in Visual Studio 2013. To summarize, we added declarations and implementations for missing functions in the following headers: math.h, ctype.h, wctype.h, stdio.h, stdlib.h, [&hellip;]<\/p>\n","protected":false},"author":270,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[190,32,36],"class_list":["post-1303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","tag-libraries","tag-stl","tag-vc"],"acf":[],"blog_post_summary":"<p>Hello, I&rsquo;m Pat Brenner, a developer on the Visual C++ Libraries team. In this blog post I want to share some information about the C99 support added to the C run-time library in Visual Studio 2013. To summarize, we added declarations and implementations for missing functions in the following headers: math.h, ctype.h, wctype.h, stdio.h, stdlib.h, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/1303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=1303"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/1303\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=1303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=1303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=1303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}