3 ms·
Not the OP, but: * the comma operator (why not just allow blocks to be used as expressions?) * multi-character constants (yay implementation-defined behavier)
by xigoi 3y ago
Not the OP, but:
* the comma operator (why not just allow blocks to be used as expressions?)
* multi-character constants (yay implementation-defined behavier)
* interlacing syntactic constructs (why?????)
* the fact that the --> operator works
* the idx[arr] thing
* the fact that you need a dirty hack with enums to check something at compile time
* flat initializer lists (why?)
* void pointers (instead of a proper type system)
* the syntax for function types
* the fact that X-Macros are needed
- lelanthran 3y ago> * multi-character constants (yay implementation-defined behavier) Isn't all of reference-implementation language like Rust and Python all implementation-defined? > * the fact that the --> operator works I pointed out elsewhere (with a link) that that specific construct works in most popular languages, like Java. > * the fact that you need a dirty hack with enums to check something at compile time It's not a check, its an assert. The alternative, for languages like Java and C#, is not having compile-time asserts at all. > * the fact that X-Macros are needed They are not needed, and indeed, equivalent functionality isn't in most popular languages (or anything but, Go, I think). Since many of your complaints are applicable to other languages, it seems, to me anyway, that what you know of C is what you've read online in popular forums.
- xigoi 3y agoImplementation-defined is not a problem if there is only one implementation, since your code is going to work the same everywhere. Languages like Java literally copied most of their syntax from C, so obviously they have the same problem and I hate them too. Ditto for other languages that don't have compile-time asserts. X-macros are a poor substitute for… well, actual macros. Or just metaprogramming in general.