Acceptable definitions of main
Section [basic.start.main]
Daniel Kr├╝gler

Created on 2009-11-17.00:00:00 last changed 90 months ago


Date: 2012-02-15.00:00:00

[Voted into the WP at the February, 2012 meeting; moved to DR at the October, 2012 meeting.]

Date: 2011-08-15.00:00:00

Proposed resolution (August, 2011):

Change [basic.start.main] paragraph 2 as follows:

...All implementations shall allow both of the following definitions of main:

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


  int main(int argc, char* argv[]) { /* ... */ }
  • function of () returning int and

  • function of (int, pointer to pointer to char) returning int

as the type of main ( [dcl.fct]. In the latter form, for purposes of exposition, the first function parameter is called argc and the second function parameter is called argv, where argc shall be the number of arguments...

Date: 2009-11-17.00:00:00

The specification of the forms of the definition of main that an impliementation is required to accept is clear in C99 that the parameter names and the exact syntactic form of the types can vary. Although it is reasonable to assume that a C++ implementation would accept a definition like

    int main(int foo, char** bar) { /* ... */ }

instead of the canonical

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

it might be a good idea to clarify the intent using wording similar to C99's.

Date User Action Args
2014-03-03 00:00:00adminsetstatus: drwp -> cd3
2012-11-03 00:00:00adminsetstatus: dr -> drwp
2012-02-27 00:00:00adminsetmessages: + msg3788
2012-02-27 00:00:00adminsetstatus: ready -> dr
2011-09-06 00:00:00adminsetmessages: + msg3425
2011-09-06 00:00:00adminsetstatus: open -> ready
2009-11-17 00:00:00admincreate