Yes true. Check 5.1.2.2.1 and 5.1.2.2.3 in the standard.
If you don't treat 'main' specially you won't have a conforming C compiler. It's unique in accepting different signatures, and for its return value syntax and semantics.
You cannot just compile it as a normal function and link it with a runtime routine. You need compiler support for it.
There are probably implementations that require compiler support, but it is not required by the standard and not true of many common implementations. Support is by the caller, as described in others' parallel comments.
> You cannot just compile it as a normal function and link it with a runtime routine.
You can. As a concrete example, for the following two programs,
int maim(int argc, char *argv[]) { return 0; }
int main(int argc, char *argv[]) { return 0; }
the assembly code produced by gcc 9.3 x64 is identical except for the spelling of the identifier. int maim(int argc, char *argv[]) { }
int main(int argc, char *argv[]) { }
They compile to different code. Can you figure out why?A function called main is treated differently in this regard to other functions, which is enforced by the standard, and so has to be implemented by the compiler.
Good point. That makes it relatively difficult (not impossible) to compile `main` differently from other functions, other than diagnosing bad signatures if that's what the hosted environment requires, since it has to be callable like other functions.