Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does int main() and void main() work? [duplicate]

Tags:

c

void

I am a beginner in the C language. Can anyone explain in detail using example how main(), int main(), void main(), main(void), void main(void), int main(void) work in C language?

As in, what is happening when we use void main() and what is happening when I use int main() in simple language and so on?

I know, but I can’t understand what is it doing:

  1. main() - function has no arguments
  2. int main() - function returns int value
  3. void main() - function returns nothing, etc.

When I write a simple Hello, World! program using the int main() return 0, it still gives me the same output as when using void main()), so how does it work? What is its application?

like image 977
user2106271 Avatar asked Sep 21 '13 02:09

user2106271


People also ask

How does int main () and void main () work?

The void main() indicates that the main() function will not return any value, but the int main() indicates that the main() can return integer type data. When our program is simple, and it is not going to terminate before reaching the last line of the code, or the code is error free, then we can use the void main().

Is int main () the same as int main void?

Actually, both seem to be the same but, int main(void) is technically better as it clearly mentions that main can only be called without any parameter.

Why void main is wrong and int main is correct?

int main() and int main(void) are same ,i.e they can only be called without any arguments. int main() can be called with number of arguments but int main(void) can only be called without any argument and this applies for any function.

Is it fine to write void main () or main () in C?

No. It's non-standard. The standard prototype of main is int main() with the optional command line arguments argc and argv . The int returned by main() is a way for a program to return a value to the system that invokes it.


2 Answers

Neither main() or void main() are standard C. The former is allowed as it has an implicit int return value, making it the same as int main(). The purpose of main's return value is to return an exit status to the operating system.

In standard C, the only valid signatures for main are:

int main(void)

and

int main(int argc, char **argv)

The form you're using: int main() is an old style declaration that indicates main takes an unspecified number of arguments. Don't use it - choose one of those above.

like image 159
Carl Norum Avatar answered Oct 05 '22 09:10

Carl Norum


If you really want to understand ANSI C 89, I need to correct you in one thing; In ANSI C 89 the difference between the following functions:

int main()
int main(void)
int main(int argc, char* argv[])

is:

int main()

  • a function that expects unknown number of arguments of unknown types. Returns an integer representing the application software status.

int main(void)

  • a function that expects no arguments. Returns an integer representing the application software status.

int main(int argc, char * argv[])

  • a function that expects argc number of arguments and argv[] arguments. Returns an integer representing the application software status.

About when using each of the functions

int main(void)

  • you need to use this function when your program needs no initial parameters to run/ load (parameters received from the OS - out of the program it self).

int main(int argc, char * argv[])

  • you need to use this function when your program needs initial parameters to load (parameters received from the OS - out of the program it self).

About void main()

In ANSI C 89, when using void main and compiling the project AS -ansi -pedantic (in Ubuntu, e.g) you will receive a warning indicating that your main function is of type void and not of type int, but you will be able to run the project. Most C developers tend to use int main() on all of its variants, though void main() will also compile.

like image 39
Ron Nuni Avatar answered Oct 05 '22 09:10

Ron Nuni