Then you have a good compiler. What are you using? Anything relatively recent should keep you from doing that. Basically, your OS invokes main to start your program, and that return value? Your OS is typically expecting that to know whether or not the process ended normally
@Nexius that's a non-portable language extension offered by Microsoft's compilers. Pretty much every compiler offers some number of language extensions, and it's important to distinguish those from the standard language.
The reason, besides it being a standard, goes back to a time before MS Windows, when C was developed for use on and for UNIX. Often full programs were little more than a string of utilities, each doing some smaller part of the whole glued together with shell scripts, and the utils needed to return a value indicating failure or success in some way that the shell script could receive.
The "int main(int argc, char *argv)" became standardized for C and subsequently C++, though MS does it's best to remake the mold.