La differenza tra int main() e int main(void)
A prima vista sia int main() che int main(void) possono sembrare uguali ma c’è una differenza significativa tra i due in C ma entrambi sono uguali in C++.
In C, una funzione senza alcun parametro può prendere qualsiasi numero di argomenti. Per esempio, una funzione dichiarata come ‘foo()’ può prendere qualsiasi numero di argomenti in C (chiamare foo(), foo(1), foo(‘A’,1) non darà alcun errore).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Il codice di cui sopra funziona bene senza dare alcun errore perché una funzione senza alcun parametro può prendere qualsiasi numero di argomenti ma questo non è il caso del C++. In C++, otterremo un errore. Vediamo.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
L’esecuzione del codice precedente ci darà un errore perché non possiamo passare nessun argomento alla funzione ‘foo’.
Invece, usando foo(void) si limita la funzione a prendere qualsiasi argomento e darà un errore. Vediamo.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Il codice precedente ci darà un errore perché abbiamo usato ‘foo(void)’ e questo significa che non possiamo passare nessun argomento alla funzione ‘foo’ come stavamo facendo nel caso di ‘foo()’.
Quindi, sia pippo(void) che pippo() sono uguali in C++ ma non in C. Lo stesso vale per la funzione ‘main’. Quindi, la forma preferita da usare è int main(void) se main non prende nessun argomento.
Differenza tra int main() e void main() e main()
Come ogni altra funzione, anche main è una funzione ma con una caratteristica speciale che l’esecuzione del programma inizia sempre da ‘main’. ‘int’ e ‘void’ sono i suoi tipi di ritorno. Quindi, discutiamo tutti e tre uno per uno.
- void main – Lo standard ANSI dice “no” al ‘void main’ e quindi usarlo può essere considerato sbagliato. Si dovrebbe smettere di usare il ‘void main’ se lo si fa.
- int main – ‘int main’ significa che la nostra funzione deve restituire un numero intero alla fine dell’esecuzione e lo facciamo restituendo 0 alla fine del programma. 0 è lo standard per il “successo dell’esecuzione del programma”.
- main – In C89, il tipo di ritorno non specificato è di default int. Quindi, main è equivalente a int main in C89. Ma in C99, questo non è permesso e quindi si deve usare int main.
Quindi, il modo preferito è int main.