When discussing C with C++ programmers I often notice a somewhat outdated view of C, usually a familiarity with a C dialect that lies somewhere between C89 and C99, because that’s essentially the “subset of C that’s supported by C++”.

I can’t blame them though because when I started writing C code again I had a similar outdated view of the language.

Also to be clear, the ‘Modern C’ I’m talking about here is not modern at all, but already two decades old. I’ll focus on the subset of C99 which is supported by clang, gcc and MSVC (clang and gcc both fully support the latest C standards of course, while (AFAIK) Microsoft’s stance unfortunately hasn’t changed much since this post from 2012.

It’s not all bad in Visual Studio land though, the Microsoft C compiler actually supports a pretty solid subset of C99 since around VS2015. I guess there are some guerilla warriors at Microsoft who secretly sneak updates into the C compiler when the C++ people are out in the field on one of their C++ Committee trips.