Ero int main() ja int main(void)
Kumpikin int main() ja int main(void) saattavat ensi silmäyksellä näyttää samoilta, mutta C:ssä ne eroavat toisistaan huomattavasti, mutta C++:ssa molemmat ovat samoja.
C:ssä funktio, jolla ei ole parametria, voi ottaa vastaan minkä tahansa määrän argumentteja. Esimerkiksi funktio ’foo()’ voi C:ssä ottaa minkä tahansa määrän argumentteja (kutsuminen foo(), foo(1), foo(’A’,1) ei anna mitään virhettä).
#include <stdio.h>void foo(){}int main(){ foo(); foo(1); foo(1,'A'); foo(1,'A',"ABC"); printf("ABC\n"); return 0;}
Ylläoleva koodi toimii moitteettomasti antamatta mitään virhettä, koska funktio, jolla ei ole parametreja, voi ottaa minkä tahansa määrän argumentteja, mutta C++:lla näin ei ole. C++:ssa saamme virheilmoituksen. Katsotaanpa.
#include <iostream>using namespace std;void foo(){}int main(){ foo(1); cout << "ABC" << endl; return 0;}
Ylläolevan koodin suorittaminen antaa meille virheen, koska emme voi välittää yhtään argumenttia funktiolle ’foo’.
Käyttämällä funktiota foo(void) funktio ei kuitenkaan voi ottaa mitä tahansa argumenttia, ja se antaa virheen. Katsotaanpa.
#include <stdio.h>void foo(void){}int main(){ foo(1); printf("ABC\n"); return 0;}
Yllä oleva koodi antaa meille virheen, koska olemme käyttäneet funktiota ’foo(void)’ ja tämä tarkoittaa, ettemme voi antaa funktiolle ’foo’ mitään argumenttia, kuten teimme funktiossa ’foo()’.
Kumpikin foo(void) ja foo() ovat siis samat C++:ssa, mutta eivät C:ssä. Sama koskee myös funktiota ’main’. Suositeltava muoto on siis int main(void), jos main ei ota yhtään argumenttia.
Ero int main() ja void main() ja main()
Kuten mikä tahansa muukin funktio, myös main on funktio, mutta sillä on se erityispiirre, että ohjelman suoritus alkaa aina ’main’-funktiosta. ’int’ ja ’void’ ovat sen paluutyyppejä. Keskustellaan siis kaikista kolmesta yksitellen.
- void main – ANSI-standardi kieltää ’void main’-funktion, joten sen käyttöä voidaan pitää vääränä. Pitäisi lopettaa ’void main’ käyttäminen, jos tekee niin.
- int main – ’int main’ tarkoittaa, että funktiomme on palautettava jokin kokonaisluku suorituksen lopussa ja teemme sen palauttamalla 0 ohjelman lopussa. 0 on standardi ”ohjelman onnistuneelle suorittamiselle”.
- main – C89:ssä määrittelemättömän paluutyypin oletusarvo on int. Main vastaa siis int mainia C89:ssä. Mutta C99:ssä tämä ei ole sallittua, joten on käytettävä int main.
Siten suositeltava tapa on int main.