3 ms·
The problem is that functions, in C, are neither prefix nor postfix. A postfix function would look like: int (int argc, char*[] argv)main prefix is: main
by curun1r 12y ago
The problem is that functions, in C, are neither prefix nor postfix. A postfix function would look like:
int (int argc, char*[] argv)main
prefix is:
main(argc int, argv []*char) int
The C version:
int main(int argc, char *argv[])
Is a horrible jumbling of both styles, with some confusion around type and name thrown in for fun.
The main benefit of the Go approach, beyond whether prefix or postfix works better, is consistency. Compare to Go's:
main(argc int, argv []*char) int
Once you learn to read it, it's much better, though perhaps not like English. In English, we preface the noun with the adjective, "the red car," whereas other languages say the equivalent of, "the car red." When people object to the Go syntax, they're almost always native English speakers.
- Peaker 12y agoWell, in C, the type operators are: Ptr(Type) -- deref type Array(Count, Type) -- elem type Func(ParamList, Type) -- return type Since the "Type" param is always there. C declaration syntax is like a linear composition of operators where the Type flows through all the operators to form the final type. The base type on the left of the declaration is the initial parameter that goes through the composition. So C type operator grammars (in the right-hand side of the declaration, excluding the base type) are actually: Ptr *rest_of_type Array rest_of_type[count] Func rest_of_type(params) That is why I say ptrs are prefix and array/func are postfix. All 3 have the extra implicit type argument that comes from the wrapping type-expression and the base type - so I wouldn't include it and say they're both prefix and postfix.