Although technically possible to
return any integer value from main() it's not always a good idea to do so. For example, on Linux the return code from main (see "exit status") is restricted to 0 to 255 inclusive, therefore under- and overflow are applicable (if you return -1 or 256 or -30 or 4000 or whatever outside the range [0..255] then expect the value reaching the calling environment to be borked). I don't know what restrictions Windows has, but *shrug*.
One reference:
The GNU C Library: Exit Status