Fortunately, Microsoft's stance on this issue has changed. MSVC++ version 12.0 (part of Visual Studio 2013) added support for
_Bool
type.
- Compound literals.
- Designated initializers.
- Mixing declarations with code.
__func__
predefined identifier.
You can check the _MSC_VER
macro for values greater than or equal to 1800 to see whether these features are supported.
Standard library support has been updated and is mostly complete since MSVC 14.0 (Visual Studio 2015). This release also added the inline
keyword.
The restrict
keyword, a conformant preprocessor and C11 support arrived in Visual Studio 2019 Release 16.8, but this doesn't include some mandatory C99 features made optional in C11.
Things that earlier versions already supported (I think since at least MSVC 7.1 / Visual Studio 2003):
//
style comments.
long long
type.
- Flexible array members (Microsoft called them "unsized arrays").
- Variadic macros (at least partially).
Things that are still missing:
- Variable length arrays (optional in C11, not planned).
_Complex
type (optional in C11, not planned).
- C11 multithreading (optional feature, on the roadmap).
- C11 atomic primitives and types (optional feature, on the roadmap).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…