>>11294>overcomplicated grammar in comparison to languages like Forth and SchemeSure, but on the grand spectrum, it's simpler than almost everything else popular, and many of its contemporaries.
>expressions and statements are differentA statement is just an expression with a semicolon, or one of the special control structures. The language is imperative; what do you expect?
>complicated operator precedenceThe same can be said for mathematics as a whole. It's reasonably easy to memorize.
>operators and functions are differentEven Scheme has special forms.
>#include is required to include the standard library, separated into many chunks, while the language is incapable of generating functions at runtimeImagine the nightmare on embedded systems with an implicit standard library. Good-bye, whatever limited memory you had.
On Plan 9, you have to do minimal includes compared to UNIX.
>no module system is availablePerhaps C's greatest shortcoming in terms or programming in the large. I concede this.
>there is a great deal of undefined behavior (191 cases from C99There's much less in Plan 9 C due to its simpler nature. C99 is basically Hitler. Anybody who calls it C is a heretic.
>portability is made difficult by many basic datatypes being allowed to be many different sizesThis is indeed a mess. Go's explicit built-in sized typenames are much nicer.
>no semantically aware macros"pitfall" doesn't mean "lacks something I like".
>no standardized way to communicate with or change the compiler (metaprogramming)The preprocessor, while limited, does in fact facilitate metaprogramming.
>variadic functions are clumsyTrue. Go's way of doing this is, again, better. I concede this.
>the standard library is rather barePlan 9's is smaller but richer.
>buffer overflows are made easySo are many useful things.
>array decayYeah, arrays are a mess.
C is flawed, but I don't find any of these features to be a dealbreaker. Some of these are a matter of taste; others are true-blue flaws. Yeah, Go has replaced C in my day-to-day programming, but that's because the tooling and interfaces are a lot more like Plan 9 C than GNU C, but using the plan 9 C compilers isn't particularly well-documented outside of Plan 9 and the Go compilers.