Nuevo

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

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



Considere las siguientes dos definiciones de main ().

int main()
{
   /*  */
   return 0;
}
y
int main(void)
{
   /*  */
   return 0;
}
¿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 main solo se puede llamar 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 ningún parámetro. 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 diversión ().

// Program 1 (Compiles and runs fine in C, but not in C++)
void fun() {  } 
int main(void)
{
    fun(10, "GfG", "GQ");
    return 0;
}
El programa anterior se compila y funciona bien (link ), pero el siguiente programa falla en la compilación (link )

// Program 2 (Fails in compilation in both C and C++)
void fun(void) {  }
int main(void)
{
    fun(10, "GfG", "GQ");
    return 0;
}
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, int main () se puede llamar con cualquier número de argumentos, pero int main (void) solo se puede llamar sin ningún argumento. Aunque no hace ninguna diferencia la mayoría de las veces, el uso de "int main (void)" es una práctica recomendada en C.
Ejercicio:
predice la salida de los siguientes programas en C.
Pregunta 1

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

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

No hay comentarios