La diferencia entre int main() y int main(void)
Tanto int main() como int main(void) pueden parecer iguales a primera vista, pero hay una diferencia significativa entre los dos en C, pero ambos son iguales en C++.
En C, una función sin ningún parámetro puede tomar cualquier número de argumentos. Por ejemplo, una función declarada como ‘foo()’ puede tomar cualquier número de argumentos en C (llamar a foo(), foo(1), foo(‘A’,1) no dará ningún error).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
El código anterior se ejecuta bien sin dar ningún error porque una función sin ningún parámetro puede tomar cualquier número de argumentos pero este no es el caso de C++. En C++, obtendremos un error. Veamos.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
La ejecución del código anterior nos dará un error porque no podemos pasar ningún argumento a la función ‘foo’.
Sin embargo, el uso de foo(void) restringe la función a tomar cualquier argumento y arrojará un error. Veamos.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
El código anterior nos dará un error porque hemos utilizado ‘foo(void)’ y esto significa que no podemos pasar ningún argumento a la función ‘foo’ como estábamos haciendo en el caso de ‘foo()’.
Entonces, tanto foo(void) como foo() son iguales en C++ pero no en C. Lo mismo ocurre con la función ‘main’ también. Por lo tanto, la forma preferida para usar es int main(void) si main no está tomando ningún argumento.
Diferencia entre int main() y void main() y main()
Como cualquier otra función, main es también una función pero con una característica especial que la ejecución del programa siempre comienza desde el ‘main’. ‘int’ y ‘void’ son sus tipos de retorno. Por lo tanto, vamos a discutir los tres uno por uno.
- void main – El estándar ANSI dice «no» a la ‘void main’ y por lo tanto su uso puede ser considerado incorrecto. Uno debe dejar de usar el ‘void main’ si lo hace.
- int main – ‘int main’ significa que nuestra función necesita devolver algún entero al final de la ejecución y lo hacemos devolviendo 0 al final del programa. 0 es el estándar para la «ejecución exitosa del programa».
- main – En C89, el tipo de retorno no especificado es por defecto int. Así, main es equivalente a int main en C89. Pero en C99, esto no está permitido y por lo tanto uno debe usar int main.
Así que, la forma preferida es int main.