A diferença entre int main() e int main(void)
ambos int main() e int main(void) podem parecer iguais à primeira vista mas existe uma diferença significativa entre os dois em C mas ambos são iguais em C+++.
Em C, uma função sem qualquer parâmetro pode levar qualquer número de argumentos. Por exemplo, uma função declarada como ‘foo()’ pode pegar qualquer número de argumentos em C (chamando foo(), foo(1), foo(‘A’,1) não dará qualquer erro).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
O código acima funciona bem sem dar qualquer erro porque uma função sem qualquer parâmetro pode pegar qualquer número de argumentos mas este não é o caso com C+++. Em C++, vamos obter um erro. Vamos ver.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
A execução do código acima nos dará um erro porque não podemos passar nenhum argumento para a função ‘foo’.
No entanto, usando foo(void) restringe a função para pegar qualquer argumento e irá lançar um erro. Vamos ver.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
O código acima nos dará um erro porque usamos ‘foo(void)’ e isto significa que não podemos passar nenhum argumento para a função ‘foo’ como estávamos fazendo no caso do ‘foo()’.
Então, ambos foo(void) e foo() são iguais em C++ mas não em C. O mesmo é o caso da função ‘principal’ também. Então, a forma preferida para usar é int main(void) se main não está tomando nenhum argumento.
Diferença entre int main() e void main() e main()
Como qualquer outra função, main também é uma função mas com uma característica especial que a execução do programa sempre inicia a partir do ‘main’. ‘int’ e ‘void’ são o seu tipo de retorno. Então, vamos discutir as três uma por uma.
- void main – O padrão ANSI diz “não” para o ‘void main’ e assim usá-lo pode ser considerado errado. Deve-se parar de usar o ‘void main’ se isso for feito.
- int main – ‘int main’ significa que nossa função precisa retornar algum número inteiro no final da execução e nós o fazemos retornando 0 no final do programa. 0 é o padrão para a “execução bem sucedida do programa”.
- main – Em C89, o tipo de retorno não especificado é o padrão para int. Portanto, main é equivalente a int main em C89. Mas em C99, isto não é permitido e portanto deve-se usar int main.
Então, a maneira preferida é int main.