main() function in C

  1. A declaration of a function is needed only before a function is used. The definition is itself a declaration, so no prior prototype is required. (Some compilers and other tools may warn if a function is defined without a prior prototype. This is intended as a helpful guideline, not a rule of the C language.)
  2. Because the C standard says so. Operating systems pass the return value to the calling program (usually the shell). Some compilers will accept void main, but this is a non-standard extension (it usually means “always return zero to the OS”).
  3. By convention, a non-zero return value signals that an error occurred. Shell scripts and other programs can use this to find out if your program terminated successfully.

1) All functions must be declared in their function prototype, and later on, in their definition. Why don’t we have to declare the main() function in a prototype first?

Not true. Simple example:

void foo(){}  //definition

int main()
{
    foo();
    return 0;
}

Only when one function is called but the definition isn’t seen yet, a declaration is required. That will never happen to main since it is the starup of the program.


2) Why do we have to use int main() instead of void main()?

Because the standard says so. (To be more precise, it’s true on a hosted environment, which is usually the case)

C99 5.1.2.2.1 Program startup

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent; or in some other implementation-defined manner.


3) What does return 0 exactly do in the main() function? What would happen if I wrote a program ending the main() function with return 1, for example?

The return value indicates the result of the program. Usually 0 indicates success while other values indicates different kinds of failure.

Leave a Comment