a) As far as I'm aware no other languages at that time suffered from this ridiculous defect.
b) It doesn't really seem like the thing where you'd need 20/20 hindsight to figure out it's a bad idea.
The same applies to a lot of the lasting braindamage C has inflicted on the computing industry. It's just that people have been numbed to it thanks to constant exposure as every single popular language in the last twenty years has aped at least some of C's defects.
Other major problems either introduced or spread by C include:
- the execrable octal number syntax
- fallthrough-as-default case statements
- non-first class arrays
- strings that don't know their length
- the unsafe/ub-by-default mindset
- braindamaged linking
- abusing = for assignment, combined with making assignment an expression. For most of C's history you'd not even get a compiler warning for if (a = b) ...
- generally there is a very unhealthy mix of of being highly imperative and statement based and at the same time having a lot of ad hoc ways to "expressionify" things (comma operator, ternary, pre-and-post increment/decrement), which, combined with undefined order of evaluation, encourages all sorts of errors.
- error-prone optional braces syntax (dangling if etc.)
- remainder (rather than modulo) operator
- very nasty implicit number promotion rules
- messed up operator precedence
- "if (!pred(x) || a <= b && y)" for "if not pred(x) or a =< b and y"
- the c pre-processor
- a broken comment syntax (how do you comment out a region with comments inside?)
- spuriously non-grepable function definitions/declarations