7 ms·
GCC was originally written in GNU C. Around GCC 4.9, its developers decided to switch to a subset of C++ to use certain features, but if you look at the codebas
by ryao 1y ago
GCC was originally written in GNU C. Around GCC 4.9, its developers decided to switch to a subset of C++ to use certain features, but if you look at the codebase, you will see that much of it is still GNU C, compiled as GNU C++.
There is nothing you can do in C++ that you cannot do in C due to Turing Completeness. Many common things have ways of being done in C that work equally well or even better. For example, you can use balanced binary search trees in C without type errors creating enormous error messages from types that are sentences if not paragraphs long. Just grab BSD’s sys/tree.h, illumnos’ libuutil or glib for some easy to use balanced binary search trees in C.
- AdieuToLogic 1y ago> There is nothing you can do in C++ that you cannot do in C due to Turing Completeness. While this is technically true, a more satisfying rationale is provided by Stroustrup here[0]. > Many common things have ways of being done in C that work equally well or even better. For example, you can use balanced binary search trees in C without type errors creating enormous error messages from types that are sentences if not paragraphs long. Just grab BSD’s sys/tree.h, illumnos’ libuutil or glib for some easy to use balanced binary search trees in C. Constructs such as sys/tree.h[1] replicate the functionality of C++ classes and templates via the C macro processor. While they are quite useful, asserting that macro-based definitions provide the same type safety as C++ types is simply not true. As to the whether macro use results in "creating enormous error messages" or not, that depends on the result of the textual substitution. I can assure you that I have seen reams of C compilation error messages due to invalid macro definitions and/or usage. 0 - https://www.stroustrup.com/compat_short.pdf https://www.stroustrup.com/compat_short.pdf 1 - https://cgit.freebsd.org/src/tree/sys/sys/tree.h https://cgit.freebsd.org/src/tree/sys/sys/tree.h
- AdieuToLogic 1y agoWhere C macros provide functionality C++ classes and/or templates cannot is stringification of their argument(s). For example: #include <iostream> #define SQL(statement) #statement int main (int ac, const char *av[]) { const char *select = SQL(select * from some_table); std::cout << select << std::endl; return 0; }