I know that in C compilers the main() function is called by the _start() function which has code something like this:
main()
_start()
exit(main());
The C-standard does not allow you to return any other value than int or void -- the c-compiler specifically test for the signature of main to make sure it is compatible.