Skip site navigation (1)Skip section navigation (2)
Date:      06 Sep 96 10:19:20 EDT
From:      Jan Knepper <100626.3506@CompuServe.COM>
To:        "[FreeBSD Hackers]" <freebsd-hackers@FreeBSD.ORG>
Subject:   Re: void main
Message-ID:  <960906141919_100626.3506_BHL134-1@CompuServe.COM>

next in thread | raw e-mail | index | archive | help
/*
> Strictly speaking, there are exactly two correct versions of main():
> 
> int main(void);
> 
> and
> 
> int main(int argc, char *argv[]);
> 

	What's wrong with this version? ;-)

int main (int argc, char *argv[], char *env[]);
*/


Proza from the C++ Draft April 18 1995, Doc No:X3J16/95-0087:



  3.6.1  Main function                                [basic.start.main]

1 A program shall contain a global function called main,  which  is  the
  designated start of the program.

2 This  function  is  not predefined by the implementation, it cannot be
  overloaded,   and   its   type   is    implementation-defined.     All

  implementations shall allow both of the following definitions of main:
          int main() { /* ... */ }
  and
          int main(int argc, char* argv[]) { /* ... */ }
  In the latter form argc shall be the number of arguments passed to the
  program  from the environment in which the program is run.  If argc is
  nonzero  these  arguments  shall  be  supplied  in   argv[0]   through
  argv[argc-1]  as pointers to the initial characters of null-terminated
  multibyte strings (NTMBSs) and argv[0] shall be  the  pointer  to  the
  initial  character  of a NTMBS that represents the name used to invoke
  the program or "".  The value of argc shall be nonnegative.  The value
  of  argv[argc]  shall be 0.  [Note: It is recommended that any further
  (optional) parameters be added after argv.  ]

3 The function main() shall not be called from within  a  program.   The
  linkage  (_basic.link_)  of  main()  is  implementation-defined.   The
  address of main() shall not be taken and main() shall not be  declared
  inline or static.  The name main is not otherwise reserved.  [Example:
  member functions, classes, and enumerations can be called main, as can
  entities in other namespaces.  ]

4 Calling the function
          void exit(int);
  declared  in  <cstdlib> (_lib.support.start.term_) terminates the pro-
  gram without leaving the current block and  hence  without  destroying
  any objects with automatic storage duration (_class.dtor_).  The argu-
  ment value is returned to the program's environment as  the  value  of
  the program.

5 A  return statement in main() has the effect of leaving the main func-
  tion (destroying any objects  with  automatic  storage  duration)  and
  calling  exit()  with  the  return  value as the argument.  If control
  reaches the end of main without encountering a return  statement,  the
  effect is that of executing
          return 0;



Don't worry, be Kneppie,
Jan




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?960906141919_100626.3506_BHL134-1>