My copy of C99 states:
"If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified." (emphasis mine)

So, if you do not explicitly return a value from main(), main() will return 0.

On the other hand, I understand that C89 requires that some value be explicitly returned from main(), 0 meaning success.