> I can't think of any C syntax that's not valid C++,
enum toto { a = 1 };
enum toto b = 1;
Fixing versions of both standards could bring in more examples (like trailing comma in enums and use of the names reserved in C++, by the C code).
Overall, ironically, as typing is stronger in C++ (which I agree is a non-syntactic change), poor C code (using lots of unjustified casts), will require less modifications to be compiled as C++.
C supports variable-length stack-allocated arrays, while C++ doesn't. So code like
void f() {
int x;
scanf("%d", &x); // read from user
int numbers[x]; // dynamic
}
is legal C, but not C++.
Also, the C "restrict" keyword doesn't exist in C++ either. Add in C's looser typing rules regarding conversions, and C and C++ are basically sibling languages at this point. Their common ancestor language being K&R-era C.
> C supports variable-length stack-allocated arrays, while C++ doesn't. So > code like
>
> void f() {
> int x;
> scanf("%d", &x); // read from user
> int numbers[x]; // dynamic
> }
I just pasted this in a file (and added `#include <cstdio>`) and compiled with g++, and it gave no errors or warnings and produced a *.o file, so maybe it does work?
That's because gcc supports it as an extension to C++. It's not an official part of the language, and using it in C++ code is therefore not portable across compilers/platforms.
> I can't think of any C syntax that's not valid C++,
enum toto { a = 1 };
enum toto b = 1;
Fixing versions of both standards could bring in more examples (like trailing comma in enums and use of the names reserved in C++, by the C code).
Overall, ironically, as typing is stronger in C++ (which I agree is a non-syntactic change), poor C code (using lots of unjustified casts), will require less modifications to be compiled as C++.