3 ms·
> 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 ma
by kps 6y ago
> 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.
- chrisseaton 6y agoNow try 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.
- kps 6y agoDamn, you're right: Currently, “reaching the } that terminates the main function returns a value of 0”. In my defense, that was different in C89, which was the last one I worked on implementing and knew completely: “If the main function executes a return that specifies no value, the termination status returned to the host environment is undefined” and “Reaching the } that terminates a function is equivalent to executing a return statement without an expression.”