Forskellen mellem int main() og int main(void)
Både int main() og int main(void) kan se ens ud ved første øjekast, men der er en væsentlig forskel mellem de to i C, men de er begge ens i C++.
I C kan en funktion uden nogen parameter tage et vilkårligt antal argumenter. F.eks. kan en funktion erklæret som “foo()” tage et vilkårligt antal argumenter i C (at kalde foo(), foo(1), foo(‘A’,1) vil ikke give nogen fejl).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Overstående kode kører fint uden at give nogen fejl, fordi en funktion uden nogen parameter kan tage et vilkårligt antal argumenter, men det er ikke tilfældet i C++. I C++ vil vi få en fejl. Lad os se.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
Kørslen af ovenstående kode vil give os en fejl, fordi vi ikke kan overdrage noget argument til funktionen ‘foo’.
Hvorimod brugen af foo(void) begrænser funktionen til at tage et hvilket som helst argument og vil give en fejl. Lad os se.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Overstående kode vil give os en fejl, fordi vi har brugt ‘foo(void)’, og det betyder, at vi ikke kan overdrage noget argument til funktionen ‘foo’, som vi gjorde i tilfældet med ‘foo()’.
Så både foo(void) og foo() er ens i C++, men ikke i C. Det samme er også tilfældet med ‘main’-funktionen. Så den foretrukne form at bruge er int main(void), hvis main ikke tager noget argument.
Skift mellem int main() og void main() og main()
Som enhver anden funktion er main også en funktion, men med den særlige egenskab, at programmets udførelse altid starter fra ‘main’. ‘int’ og ‘void’ er dens returtype. Så lad os diskutere alle tre en efter en.
- void main – ANSI-standarden siger “nej” til ‘void main’, og derfor kan det betragtes som forkert at bruge den. Man bør stoppe med at bruge ‘void main’, hvis man gør det.
- int main – ‘int main’ betyder, at vores funktion skal returnere et eller andet heltal ved afslutningen af udførelsen, og det gør vi ved at returnere 0 ved slutningen af programmet. 0 er standarden for “vellykket udførelse af programmet”.
- main – I C89 er den uspecificerede returneringstype som standard int. Så main svarer til int main i C89. Men i C99 er dette ikke tilladt, og derfor skal man bruge int main.
Så den foretrukne måde er int main.