3

C does not support function overloading. How can we then have 3 prototypes for main? What is the historical reason for having 3 prototypes?

Bruce
  • 33,927
  • 76
  • 174
  • 262
  • The answer to your question can be found here: http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-user-to-define/5296593#5296593 – Lundin Sep 27 '11 at 14:22

1 Answers1

9

There are only two prototypes for main that a standard-conforming C implementation is required to recognize: int main(void) and int main(int, char *[]). This is not overloading, since there can still only be one main per program; having a void foo(int, double) in one program and a char *foo(FILE *) in another isn't overloading either.

The reason for the two prototypes is convenience: some applications want command-line arguments, while others don't bother with them.

All other prototypes, such as void main(void) and int main(int, char *[], char *[]), are compiler/platform-dependent extensions.

Fred Foo
  • 355,277
  • 75
  • 744
  • 836
  • There are only two _canonical_ forms of `main` and the second also has the text "or equivalent" tacked on (so `char**` is okay). In addition, the standard also _explicitly_ allows others - it just doesn't mandate them. – paxdiablo Sep 27 '11 at 12:37
  • @paxdiablo: I decided not to bother with equivalent forms since they're already handled by other rules in the standard. Thanks for the other remark, added "required" to the answer. – Fred Foo Sep 27 '11 at 12:39
  • This only answers how it works on a hosted system. For a complete answer check this link: http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-user-to-define/5296593#5296593 – Lundin Sep 27 '11 at 14:24