When compiling with a specific vendor's implementation of the C language, and related libraries, be aware that, unfortunately, standards conformance can differ from vendor to vendor. Be certain to read your vendor's documentation to reduce the likelihood of accidentally relying on implementation-specific behavior or deviations.
Implementation-Specific Deviations
Implementation-specific deviations are listed below. The Version column lists the latest version of the compiler or library that exhibits the behavior.
Microsoft Visual Studio
API | Description | Version | Link |
---|---|---|---|
<complex.h> | Absent; __STDC_NO_COMPLEX__ is defined | 2012 | |
isblank() | Absent | 2012 | |
<fenv.h> | Absent | 2012 | |
<inttypes.h> | Absent | 2012 | |
| Absent | 2012 | |
#pragma FP_CONTRACT | Spelled fp_contract instead of FP_CONTRACT | 2012 | MSDN |
fpclassify() | Absent, use _fpclass() instead | 2012 | MSDN |
isfinite() , isinf() | Absent, use _finite() or _finitef() instead | 2012 | MSDN |
isnan() | Absent, use _isnan() or _isnanf() instead | 2012 | MSDN |
isnormal() | Absent, use _fpclass() instead | 2012 | MSDN |
signbit() | Absent | 2012 | |
acosh() , asinh() , atanh() | Absent | 2012 | |
exp2() , expm1() , ilogb() , log1p() ,log2() | Absent | 2012 | |
scalbn() | Absent; use _scalb() (or _scalbf() on x64 targets only) instead | 2012 | MSDN |
cbrt() | Absent | 2012 | |
erf() , erfc() , lgamma() , tgamma() | Absent | 2012 | |
nearbyint() , rint() , lrint() ,round() , lround() , trunk() | Absent | 2012 | |
remainder() , remquo() | Absent | 2012 | |
copysign() | Absent; use _copysign() instead | 2012 | MSDN |
nan() , nexttoward() | Absent | 2012 | |
nextafter() | Absent; use _nextafter() or _nextafterf() instead | 2012 | MSDN |
fdim() , fmax(), fmin() | Absent | 2012 | |
fma() | Absent | 2012 | |
isgreater() , isgreaterequal() ,isless() , islessequal() , isunordered() | Absent | 2012 | |
<stdalign.h> | Absent | ||
va_copy() | Absent | 2012 | |
<stdatomic.h> | Absent | 2012 | |
<stdbool.h> | Absent; _Bool is not supported in /TC mode, but bool is supported in /TP mode | 2012 | MSDN |
max_align_t | Absent | 2012 | |
Printing format specifier type field | S is MSVC-specific; c , s , and z are not ANSI compatible; F is unsupported | 2012 | MSDN |
Printing format specifier size field | I , I32 and I64 are MSVC-specific; h , w and l are not ANSI compatible; hh , j , z and t unsupported | 2012 | MSDN |
Scanning format specifier type field | S is MSVC-specific; c and s are not ANSI compatible; p is unsupported | 2012 | MSDN |
Scanning format specifier size field | I64 is MSVC-specific; h , l , and L prefixes are not ANSI compatible; hh , j , z , and t are unsupported | 2012 | MSDN |
snprintf() | Absent; use _snprintf() instead | 2012 | MSDN |
vfscanf() , vscanf() , vsscanf() | Absent | 2012 | |
atoll() | Absent; use _atoi64() instead | 2012 | MSDN |
strtof() , strtold() | Absent | 2012 | |
strtoll() | Absent; use _strtoi64() instead | 2012 | MSDN |
strtoull() | Absent; use _strtoui64() instead | 2012 | MSDN |
aligned_alloc() | Absent; use _aligned_malloc() instead (be aware, the parameter order is reversed) | 2012 | MSDN |
at_quick_exit() , quick_exit() | Absent | 2012 | |
_Exit() | Absent; use _exit() instead | 2012 | MSDN |
<stdnoreturn.h> | Absent; use __declspec(noreturn) instead | 2012 | MSDN |
<tgmath.h> | Absent | 2012 | |
<threads.h> | Absent | 2012 | |
TIME_UTC, struct timespec, timespec_get() | Absent | 2012 | |
strftime(), wcsftime() | z is not ANSI compatible; C , D , e , F , g , G , h , n , r , R , t , T , u , V unsupported | 2012 | MSDN |
<uchar.h> | Absent | 2012 | |
vfwscanf() , vswscanf() , vwscanf() | Absent | 2012 | |
fwide() | Unsupported | 2012 | MSDN |
wcstof() , wcstold() | Absent | 2012 | |
wcstoll() | Absent; use _wcstoi64() instead | 2012 | MSDN |
wcstoull() | Absent; use _wcstoui64() instead | 2012 | MSDN |
iswblank() | Absent | 2012 | |
FLT_EVAL_METHOD , *_HAS_SUBNORM ,*_DECIMAL_DIG , *_TRUE_MIN | Absent | 2012 |