Search code examples
c++returnstandardsprogram-entry-point

Why default return value of main is 0 and not EXIT_SUCCESS?


The ISO 1998 c++ standard specifies that not explicitly using a return statement in the main is equivalent to use return 0. But what if an implementation has a different standard "no error" code, for example -1?

Why not use the standard macro EXIT_SUCCESS that would be replaced either by 0 or -1 or any other value depending on the implementation?

C++ seems to force the semantic of the program, which is not the role of a language which should only describe how the program behaves. Moreover the situation is different for the "error" return value: only EXIT_FAILURE is a standard "error" termination flag, with no explicit value, like "1" for example.

What are the reasons of these choices?


Solution

  • Returning zero from main() does essentially the same as what you're asking. Returning zero from main() does not have to return zero to the host environment.

    From the C90/C99/C++98 standard document:

    If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned.