...
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 |
---|---|---|
Variable-length arrays | Absent | 2012 |
static and type qualifiers inparameter array declarators | Absent | 2012 |
_Static_assert | Absent; can use static_assert , as in C++11 | 2012 |
_Noreturn | Absent; can use __declspec(noreturn) | 2012 |
inline | Absent; can use __inline | 2012 |
Hexadecimal floating-point constants | Absent | 2012 |
Compound literals | Absent | 2012 |
Designated initializers | Absent | 2012 |
Implicit function declarations | Support was removed in C11, but it is still supported in MSVC (with diagnostic) | 2012 |
Mixed declarations and code | Absent | 2012 |
_Pragma
| Absent; can use __pragma | 2012 |
_Bool | Absent | 2012 |
_Complex | Absent | 2012 |
__func__ | Absent; can use __FUNCTION__ | 2012 |
idempotent type qualifiers | Diagnosed, but functional | 2012 |
_Thread_local | Absent; can use __declspec(thread) |
<complex.h> | Absent; __STDC_NO_COMPLEX__ is not 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 |
fpclassify() | Absent, use _fpclass() instead | 2012 |
isfinite() , isinf() | Absent, use _finite() or _finitef() instead | 2012 |
isnan() | Absent, use _isnan() or _isnanf() instead | 2012 |
isnormal() | Absent, use _fpclass() instead | 2012 |
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 |
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 |
nan() , nexttoward() | Absent | 2012 |
nextafter() | Absent; use _nextafter() or _nextafterf() instead | 2012 |
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; __STDC_NO_ATOMICS__ is not defined | 2012 |
<stdbool.h> | Absent; _Bool is not supported in /TC mode, but bool is supported in /TP mode | 2012 |
max_align_t | Absent | 2012 |
Printing format specifier type field | S is MSVC-specific; c , s , and z are not conforming [ISO/IEC 9899-2011]; F is unsupported | 2012 |
Printing format specifier size field | I , I32 and I64 are MSVC-specific; h , w and l are not conforming [ISO/IEC 9899-2011]; hh , j , z and t unsupported | 2012 |
Scanning format specifier type field | S is MSVC-specific; c and s are not conforming [ISO/IEC 9899-2011]; p is unsupported | 2012 |
Scanning format specifier size field | I64 is MSVC-specific; h , l , and L prefixes are not conforming [ISO/IEC 9899-2011]; hh , j , z , andt are unsupported | 2012 |
snprintf() | Absent; beware that _snprintf() 's semantics are sufficiently different that it is not advisable as a replacement | 2012 |
vfscanf() , vscanf() , vsscanf() | Absent | 2012 |
fopen() , freopen() | Mode parameter not conforming [ISO/IEC 9899-2011]; t , c , n , N , S , R , T , D and css are MSVCextensions; x is unsupported; see remarks | 2012 |
atoll() | Absent; use _atoi64() instead | 2012 |
strtof() , strtold() | Absent | 2012 |
strtoll() | Absent; use _strtoi64() instead | 2012 |
strtoull() | Absent; use _strtoui64() instead | 2012 |
aligned_alloc() | Absent; use _aligned_malloc() instead (beware, the parameter order is reversed) | 2012 |
at_quick_exit() , quick_exit() | Absent | 2012 |
_Exit() | Absent; use _exit() instead | 2012 |
<stdnoreturn.h> | Absent; use __declspec(noreturn) instead | 2012 |
<tgmath.h> | Absent | 2012 |
<threads.h> | Absent; __STDC_NO_THREADS__ is not defined | 2012 |
TIME_UTC, struct timespec, timespec_get() | Absent | 2012 |
strftime(), wcsftime() | z is not conforming [ISO/IEC 9899-2011]; C , D , e , F , g , G , h , n , r , R , t , T , u , V unsupported | 2012 |
<uchar.h> | Absent | 2012 |
vfwscanf() , vswscanf() , vwscanf() | Absent | 2012 |
fwide() | Unsupported | 2012 |
wcstof() , wcstold() | Absent | 2012 |
wcstoll() | Absent; use _wcstoi64() instead | 2012 |
wcstoull() | Absent; use _wcstoui64() instead | 2012 |
iswblank() | Absent | 2012 |
FLT_EVAL_METHOD , *_HAS_SUBNORM ,*_DECIMAL_DIG , *_TRUE_MIN | Absent | 2012 |
__STDC_LIB_EXT1__, | Not defined; instead, MSVC uses __STDC_SECURE_LIB__ and __STDC_WANT_SECURE_LIB__ | 2012 |
fopen_s(), freopen_s() | Uses the same mode strings as fopen() ; u prefix is unsupported; see remarks | 2012 |
vfscanf_s() , vscanf_s() ,vsscanf_s() | Absent | 2012 |
constraint_handler_t ,set_constraint_handler_s(), | Absent; use _invalid_parameter_handler and _set_invalid_parameter_handler() instead. Beware that the _invalid_parameter_handler signature is considerably different than that of constraint_handler_t . No replacement for abort_handler_s() orignore_handler_s() | 2012 |
bsearch_s() | Not conforming [ISO/IEC 9899-2011]; beware that the comparison function pointer's signature is different from the standard; namely that the context parameter comes first in MSVC but last in ISO C | 2012 |
qsort_s() | Not conforming [ISO/IEC 9899-2011]; beware that the comparison function's pointer signature is different from the standard; namely that the context parameter comes first in MSVC but last in ISO C | 2012 |
strtok_s() | Not conforming [ISO/IEC 9899-2011]; the function signature is missing the rsize_t * parameter | 2012 |
memset_s(), strerrorlen_s() | Absent | 2012 |
gmtime_s(), localtime_s() | Not conforming [ISO/IEC 9899-2011]; the function signature has the parameters reversed and returnserrno_t instead of struct tm * | 2012 |
snwprintf_s() | Absent; use _snwprintf_s() instead. Note that the parameters differ from the ISO C signature | 2012 |
vfwscanf_s() , vswscanf_s() ,vwscanf_s() | Absent | 2012 |
| Absent, use _vsnwprintf_s() instead. Note that the parameters differ from the ISO C signature | 2012 |
wcstok_s() | Not conforming [ISO/IEC 9899-2011]; the function signature is missing the rsize_t * parameter | 2012 |
fopen()
& freopen()
The C standard does not specify what happens with Windows newline characters (CRLF), and so care should be taken when working with text files. For instance:
...
This program will print 32 with the given text, regardless of platform.
Automated Detection
...
Supported: Astrée reports non-standard language elements. |