https://stackoverflow.com/questions/...x-and#18658591
The “C” language still does not have a strong notion of what we today consider “types.” It is a low-level language: a mere (but, very important…) step above “assembler.” It is always, at its essence, “talking to the hardware.” (Witness the Linux kernel “/arch” subdirectory.)
Contrast with: “C++.” Which, in its original incarnation, was a macro preprocessor.
For any modern “C-style” projects, I invite you to consider “C++.” Unless you are directly concerned with hardware, go ahead and take advantage of the goodness. Notions of “macro preprocessors” are long gone, and the (“gcc …”) language-stack now handles both source languages directly. (Yay!)
Of course, “C++ interfaces” to “plain-C” code (and thence to “asm”) are also well-defined by necessity.