There is one thing I never really get. Why do people use int main(void) instead of int main()? I know it explicitly tells there are no parameters, but are there any other benefits?
Printable View
There is one thing I never really get. Why do people use int main(void) instead of int main()? I know it explicitly tells there are no parameters, but are there any other benefits?
It's better style to be explicit, and the standard says nothing about int main(). The three definitions that the standard specifies are:
int main ( void )
int main ( int argc, char *argv[] )
int main ( int argc, char **argv )
-Prelude
Also, there is a difference between C and C++ isnt there?
If you do int main () in C, it means the same as int main ( ... ) in C++, right? That is what I heard somewhere...
As far as I know there is no difference between C and C++ at that point.
Actually the standard uses an implicit void. Everything you want to know about main() -
Quote:
[basic.start.main] 3.6.1 Main function
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 (3.5) 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> (18.3) terminates the program without leaving the current block and hence with-out
destroying any objects with automatic storage duration (12.4). The argument 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 function (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;