Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which C99 features are available in the MS Visual Studio compiler?

It's well known that Microsoft's Visual Studio compiler does not support C99, and it looks like they have no plans to support it.

However, the compiler does include some cherry picked features such as variadic macros and long long - see the quotes in this answer:

Where we’ve received many requests for certain C99 features, we’ve tried to implement them (or analogues). A couple examples are variadic macros, long long, __pragma, __FUNCTION__, and __restrict. If there are other C99 features that you’d find useful in your work, let us know! We don’t hear much from our C users, so speak up and make yourselves heard

-- Arjun Bijanki, Microsoft’s representative on the ISO C standard committee http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

Additionally, newer versions of Visual Studio seem to ship with some of the headers required by C99.

There are lots of questions about specific features - but what I wan't to know is: Where can I find a list of the C99 features supported/provided by the current MSVC compiler?

I'm looking for a list like this one for gcc.

like image 572
Timothy Jones Avatar asked Mar 07 '12 23:03

Timothy Jones


People also ask

Does Visual Studio use C99?

By default, Microsoft's Visual Studio C Compiler doesn't follow the C99 standard. If you're using Visual Studio, you can make the transition process to Unix for the Lab Assignments easier by performing the following steps.

What is the C compiler used in Visual Studio?

Visual Studio comes with its own C compiler, which is actually the C++ compiler. Just use the . c file extension to save your source code.

What version of C does Visual Studio 2019 use?

For a summary of new features and bug fixes in Visual Studio version 16.8, see What's New in Visual Studio 2019 version 16.8. C++20 Coroutines are now supported under /std:c++latest (or /std:c++20 starting in Visual Studio 2019 version 16.11) and the <coroutine> header.

What version of C++ does Visual Studio 2022 use?

And, Visual Studio 2022 includes robust support for the C++ workload with new productivity features, C++20 tooling, and IntelliSense.


1 Answers

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).
like image 177
nwellnhof Avatar answered Sep 28 '22 05:09

nwellnhof