- C has broader support for designated initializers
- C allows implicitly casting void* to any other pointer type
- C has fewer keywords, e.g. you can use "friend" or "class" as identifier
- ...
Despite all this, it's true enough that one can easily write C code that also compiles as C++.
C has generics?
Go into pointer qualifiers and const with _Generic and you'll see that it's a mess to do anything serious with it. But it's handy for type-generic math (tgmath.h style) and that's seems to be about it.
- C has broader support for designated initializers
- C allows implicitly casting void* to any other pointer type
- C has fewer keywords, e.g. you can use "friend" or "class" as identifier
- ...
Despite all this, it's true enough that one can easily write C code that also compiles as C++.