<story><title>So you think you know C? (2016)</title><url>https://wordsandbuttons.online/so_you_think_you_know_c.html</url></story><parent_chain><item><author>WalterBright</author><text>Having written a conforming C compiler, at one point I knew everything there was to know about C (I forget details now and then, or confusing them with C++ and D).&lt;p&gt;But knowing every engineering detail is not the same thing as knowing how to program in C effectively. It&amp;#x27;s like being the engineer who designs a Grand Prix car. It does not mean you can drive it faster around the track than anyone else. Not even close.&lt;p&gt;For example, the C preprocessor is surprisingly complicated. I had to scrap it and rewrite it completely 3 times. If you try to make use of all those oddities, my advice is don&amp;#x27;t waste your time. Over time I removed all the C preprocessor tricks from my own code and just wrote ordinary C in its place. Much better.</text></item></parent_chain><comment><author>pcwalton</author><text>I couldn&amp;#x27;t agree more. After spending many years working with LLVM, which is at its heart a C compiler, and understanding why it has to do the sometimes-terrifying things it has to do to get C to run well, I&amp;#x27;ve become very paranoid when writing C or C++. My C&amp;#x2F;C++ code is as boring as possible.&lt;p&gt;(In fact I try to avoid writing C or C++ whenever possible these days; undefined behavior in the language is too pernicious and unfixable without breaking compatibility. I think both languages are approaching obsolescence.)</text></comment>
<story><title>So you think you know C? (2016)</title><url>https://wordsandbuttons.online/so_you_think_you_know_c.html</url></story><parent_chain><item><author>WalterBright</author><text>Having written a conforming C compiler, at one point I knew everything there was to know about C (I forget details now and then, or confusing them with C++ and D).&lt;p&gt;But knowing every engineering detail is not the same thing as knowing how to program in C effectively. It&amp;#x27;s like being the engineer who designs a Grand Prix car. It does not mean you can drive it faster around the track than anyone else. Not even close.&lt;p&gt;For example, the C preprocessor is surprisingly complicated. I had to scrap it and rewrite it completely 3 times. If you try to make use of all those oddities, my advice is don&amp;#x27;t waste your time. Over time I removed all the C preprocessor tricks from my own code and just wrote ordinary C in its place. Much better.</text></item></parent_chain><comment><author>ogoffart</author><text>And that&amp;#x27;s why people claiming that C++ is more complicated than C because it has an even bigger specification miss the point.&lt;p&gt;What counts is how easy to use in practice. You can get along just fine in C++ without knowing the exact aliasing rules from C or or how to specialize a template.
What matters is that the extra features of C++ makes actual programming simpler, not harder. (for example destructor (RAII), standard library, classes, ...)</text></comment>