2 ms·
Please do provide examples. Revisions to the C and C++ have almost never broken meaningful backwards compatibility, at least at the language semantics level.
by dymk 8y ago
Please do provide examples.
Revisions to the C and C++ have almost never broken meaningful backwards compatibility, at least at the language semantics level.
- nrclark 8y agoC's variable-length arrays are one example. They were introduced in C99, and downgraded to 'optional' in C11. So that's one place where a newer C compiler could refuse old C code and still be language compliant. Also the draft C2x standard does away with K&R declarations, which will be another compatibility break.
- pjmlp 8y agoBesides what nrclark has written on his/her comment, C11 dropped gets() and the introduction of the new memory model in C11 might break code that was relying on CPU specific semantics not in synch with it. Regarding C++: - auto changed its meaning on C++11 - export templates were removed in C++11 - exception specifications were deprecated in C++11, removed in C++17 and might do a come back in C++23 with value based exceptions - gets() got removed in C++11 - declspec and auto had a small semantic difference, settled in C++17 - initializer lists introduced in C++11 changed their auto deduction type in C++17 - the required implementation semantics for std::string in C++11 broke COW in compilers like GCC. Just a small list, there are a couple more.