@gilesgoat
#1 reason: very weak typing without runtime checking
C++ is worse than C! By being an almost-superset of C, it has all of the deficiencies of C, and adds many new ones of its own!
I will, however, admit that modern C++ does make it more practical to avoid the C pitfalls. Unfortunately it can't actually prevent them. The onus is in the programmer to know what to avoid. That's a crock.
@gilesgoat
C is a good language for a very limited problem domain. The problem is that it gets used for nearly everything, and mostly far outside that limited domain.
C combines some of the power of assembly language with almost all of the danger of assembly language.
@brouhaha @gilesgoat This one was talking to custom hardware - some one-line-of-pixels-at-a-time machine vision device and some stepping motors - in a machine whose job was to quality control microfilm of football pools coupons.
The idea was the photograph all the coupons before the matches were played to guard against people altering coupons once the results were known. As with any paper handling system, particularly one which had to read vast numbers of folded or scrunched up forms in a very short time, the photography process wasn't entirely reliable. The job of this machine was to spot forms or batches that the machine had screwed up or torn and that needed separate handling.
Late 1970s.