<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 1003</TITLE>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<STYLE TYPE="text/css">
  INS { text-decoration:none; font-weight:bold; background-color:#A0FFA0 }
  .INS { text-decoration:none; background-color:#D0FFD0 }
  DEL { text-decoration:line-through; background-color:#FFA0A0 }
  .DEL { text-decoration:line-through; background-color: #FFD0D0 }
  @media (prefers-color-scheme: dark) {
    HTML { background-color:#202020; color:#f0f0f0; }
    A { color:#5bc0ff; }
    A:visited { color:#c6a8ff; }
    A:hover, a:focus { color:#afd7ff; }
    INS { background-color:#033a16; color:#aff5b4; }
    .INS { background-color: #033a16; }
    DEL { background-color:#67060c; color:#ffdcd7; }
    .DEL { background-color:#67060c; }
  }
  SPAN.cmnt { font-family:Times; font-style:italic }
</STYLE>
</HEAD>
<BODY>
<P><EM>This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
  Core Issues List revision 118b.
  See http://www.open-std.org/jtc1/sc22/wg21/ for the official
  list.</EM></P>
<P>2025-09-28</P>
<HR>
<A NAME="1003"></A><H4>1003.
  
Acceptable definitions of <TT>main</TT>
</H4>
<B>Section: </B>6.10.3.1&#160; [<A href="https://wg21.link/basic.start.main">basic.start.main</A>]
 &#160;&#160;&#160;

 <B>Status: </B>CD3
 &#160;&#160;&#160;

 <B>Submitter: </B>Daniel Kr&#252;gler
 &#160;&#160;&#160;

 <B>Date: </B>2009-11-17<BR>


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



<P>The specification of the forms of the definition of <TT>main</TT>
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</P>

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

<P>instead of the canonical</P>

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

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

<P><B>Proposed resolution (August, 2011):</B></P>

<P>Change 6.10.3.1 [<A href="https://wg21.link/basic.start.main#2">basic.start.main</A>] paragraph 2 as follows:</P>

<BLOCKQUOTE>

<P>...All implementations shall
allow both <DEL>of the following definitions of <TT>main</TT>:</DEL>
</P>

<PRE>
<DEL>  int main() { /* ... */ }</DEL>
</PRE>

<P><DEL>and</DEL></P>

<PRE>
<DEL>  int main(int argc, char* argv[]) { /* ... */ }</DEL>
</PRE>

<UL>
<LI><P><INS>function of <TT>()</TT> returning <TT>int</TT>
and</INS></P></LI>

<LI><P><INS>function of <TT>(int,</TT> pointer to pointer to
<TT>char)</TT> returning <TT>int</TT></INS></P></LI>

</UL>

<P>
<INS>as the type of <TT>main</TT> (9.3.4.6 [<A href="https://wg21.link/dcl.fct">dcl.fct</A>].</INS> In the latter form<INS>, for purposes of
exposition, the first function parameter is called <TT>argc</TT> and
the second function parameter is called <TT>argv</TT>, where</INS>
<TT>argc</TT> shall be the number of arguments...</P>

</BLOCKQUOTE>

<BR><BR>
</BODY>
</HTML>
