What are the differences between: main () {}, int main () {} and int main (void) {}

I am currently studying C, and I have written many small programs. However, I noticed that the main function may start as

    main()
    {
       //code
    }

or

    int main()
    {
      //code
      return 0;
    }

or

    int main(void)
    {
       //code
       return 0;
    }

Which option should I use? Thanks!

-1
source share
6 answers

The first example uses a function inherited from the legacy C dialect that preceded the first ANSI (1989) and ISO (1990) standards: namely, that you can write a function that does not indicate its return type, in which case the default type equal to int.

C void . ( ", , " ), . - , . (, , return; ), , :

parse_input() /* similar to a procedure in Pascal, but fake! */
{
   /* ... */
   if (condition())
     return; /* no value */
   /* ... */
   /* fall off end here */
}

int main()
{
   parse_input(); /* no return value extracted, everything cool! */
   return 0;
}

, main :

main()
{
  /* do something */
  /* fall off the end without returning a value */
}

( : int, .)

, , . . script, !

. ++ void, C. void ++ , ( , return; ). -, main , -, --++ void :

void main() /* yikes! */
{
  /* do something */
  /* fall off the end without returning a value */
}

, , main(), int main(), , ( , ). , , , !

, ++ ++, main - int. -: "" main, , return 0;. , C99 , , ++ 98 (, , ):

int main()
{
}

( , C, 1980 ). void return main ( , , , ).

, C C99, main() { } C ++. , ++ : , .

, () (void). , ++ void. , ++ void, (void). ++ . ++ () C, . ++ int func(); , C, int func(); ​​: , . C void, : (void) , () - .

, : ++ (void) , ++ - . , , . (void) unambiguosly " ", C, ++. ++, , , ++, C, : , ! , class Foo { public: Foo(void); virtual ~Foo(void) /*...*/ };

, int main() { ... }, , , , , . , . C , ​​ !

main, , , . ( ++, main , C ). , int main() int main(void), , C ++. , main, ( , ).

, :

int main()  /* rather than main(void) */
{ 
}

, ++ C, C : ANI-C , . main, , . , GCC -Wstrict-prototypes:

test.c:1:5: warning: function declaration isn’t a prototype [-Wstrict-prototypes]

-Wstrict-prototypes - C, ( -Wmissing-prototypes), , :

int main(void) /* modern C definition which prototypes the function */
{
}

.

, main , int main(int argc, char **argv), .

++ , , main().

int main(int, char **) // both arguments ignored: C++ only
{
}

, argc, ++ :

#include <cstdio>

int main(int, char **argv)  // omitted param name: C++ only
{
  // dump the arguments
  while (*argv)
    std::puts(*argv++);
}
+2

C

(), C99 :

5.1.2.2.1

     

, , main. .    int :

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

( argc argv, , ,   ):

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

; 9) - .

     

9) , int typedef, int, argv char **argv,    .

( C89) main() () int main(void). C99. :

main() - main, .

main(void) " main, no.

+4

4 :

int main(void);
int main();

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

argc argv; , .

, void main(void);, .

+1

:

main - . main ( )

/:

main, int

. :

int main(int argc, char *argv[]){
     return 0;
}
+1
  • , "int main()" "main()"

  • "main (void)" - , "main()", , .

  • :

    int main(int argc, char *argv[]){ return 0; }

0
main(){} 

. c - int. , .

int main(){
//body
return 0;
}

, . . , .

int main(void)
{
   //code
   return 0;
}

. void , . void - , .

0

Source: https://habr.com/ru/post/1624509/


All Articles