¿Diferencia entre «int main()» y «int main(void)» en C/C++?

 

[ Nota: esto era cierto para las versiones anteriores de C, pero se modificó en C11 (y versiones más nuevas). En versiones más nuevas, foo() es lo mismo que foo(void). Consulte esto -> https://port70.net/~nsz/c/c11/n1570.html#6.11.6]

Considere las siguientes dos definiciones de main(). 
 

CPP

int main()
{
   /*  */
   return 0;
}
Producción

 


 

CPP

int main(void)
{
   /*  */
   return 0;
}
Producción

 

¿Cuál es la diferencia?
En C++, no hay diferencia, ambos son iguales.
Ambas definiciones también funcionan en C, pero la segunda definición con void se considera técnicamente mejor, ya que especifica claramente que solo se puede llamar a main sin ningún parámetro. 
En C, si la firma de una función no especifica ningún argumento, significa que la función se puede llamar con cualquier número de parámetros o sin parámetros. Por ejemplo, intente compilar y ejecutar los siguientes dos programas en C (recuerde guardar sus archivos como .c). Tenga en cuenta la diferencia entre dos firmas de fun(). 
 

C++

// Program 1 (Compiles and runs fine in C, but not in C++)
 
#include <iostream>
 
void fun() {  }
 
int main(void)
{
    fun(10, "GfG", "GQ");
   
    return 0;
}
 
// This code is contributed by sarajadhav12052009

C

// Program 1 (Compiles and runs fine in C, but not in C++)
 
void fun() {  }
 
int main(void)
{
    fun(10, "GfG", "GQ");
   
    return 0;
}

Salida de código C:

 

Salida del código C++:

prog.cpp: In function ‘int main()’:
prog.cpp:10:24: error: too many arguments to function ‘void fun()’
     fun(10, "GfG", "GQ");
                        ^
prog.cpp:6:6: note: declared here
 void fun() {  } 
      ^

El programa anterior se compila y funciona bien (ver esto ), pero el siguiente programa falla en la compilación (ver esto )
 

C++

// Program 2 (Fails in compilation in both C and C++)
 
void fun(void) {  }
 
int main(void)
{
    fun(10, "GfG","GQ");
   
    return 0;
}
 
// This code is contributed by sarajadhav12052009

C

// Program 2 (Fails in compilation in both C and C++)
void fun(void) {  }
int main(void)
{
    fun(10, "GfG", "GQ");
   
    return 0;
}

Salida del código C/C++:

prog.cpp: In function ‘int main()’:
prog.cpp:8:23: error: too many arguments to function ‘void fun()’
     fun(10, "GfG","GQ");
                       ^
prog.cpp:4:6: note: declared here
 void fun(void) {  }
      ^

A diferencia de C, en C++, los dos programas anteriores fallan en la compilación. En C++, tanto fun() como fun(void) son iguales.
Entonces, la diferencia es que, en C, se puede llamar a int main() con cualquier número de argumentos, pero solo se puede llamar a int main(void) sin ningún argumento. Aunque no hace ninguna diferencia la mayoría de las veces, usar “int main(void)” es una práctica recomendada en C.
Ejercicio: 
Prediga la salida de los siguientes programas en C.
Pregunta 1 
 

C

#include <stdio.h>
int main()
{
    static int i = 5;
    if (--i){
        printf("%d ", i);
        main(10);
    }
}

Pregunta 2 
 

C

#include <stdio.h>
int main(void)
{
    static int i = 5;
    if (--i){
        printf("%d ", i);
        main(10);
    }
}

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *