3 ms·
> And since C++ is a superset of C that is certainly true there. C++ is not a superset of C. C99 has and C++ (at the time of writing) doesn't have: restricted
by kaashif 3y ago
> And since C++ is a superset of C that is certainly true there.
C++ is not a superset of C. C99 has and C++ (at the time of writing) doesn't have: restricted pointers, designated initializers, variable length arrays, and probably more. These are language features that are actually used.
This doesn't change any of your core points.
- patrick451 3y agoC++ has had designated initializers since c++20.
- turndown 3y agoAny look into this will show that C's designated initializers are significantly more flexible/better in every way.
- SubjectToChange 3y agoIt’s amusing to me that whenever C has a feature that C++ doesn’t, C programmers hammer on the usefulness and power of said feature, but on the converse those same C programmers hammer on the divine simplicity of C. C++ has constructors, it doesn’t really need designated initializers in the first place. They were added primarily for C compatibility.
- kaashif 3y agoPoint taken, I was inaccurate. Out of order designated initializers still don't work in C++20, right? Which still means C++ isn't a superset of C.
- ftaghn 3y ago> variable length arrays It was such a terrible feature it was made optional in the C11 standard (you can be a conforming C11 compiler and not allow this feature) and will never, ever be implemented in a Microsoft compiler (while C is not a priority for MS, do note that they updated to C11 and C17). You can hear their reasoning there : https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/ https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-... The linux kernel used to make use of the feature and removed every instance of it from the code base : https://www.phoronix.com/news/Linux-Kills-The-VLA https://www.phoronix.com/news/Linux-Kills-The-VLA > Particularly over the past several cycles there has been code eliminating the kernel's usage of VLAs and that has continued so far for this Linux 4.20~5.0 cycle. There had been more than 200 spots in the kernel relying upon VLAs but now as of the latest Linux Git code it should be basically over. While I do agree that it is wrong to consider C++ a superset of C, it is time to forget about C99's biggest mistake and treat it as if it didn't happen.
- kaashif 3y agoAgreed completely on all counts. Never ever use VLAs. My point is really just semantic, the overall argument I was responding to is intact.