C++ ban mikor használjuk főtörzsként a void main () -t, és mikor az int main () -t?
Mik a különbség a kettő közül? Láttam olyant is hogy voidon belül pl számértéket várunk vissza,miközben az int is ezt a funkciót tölti be.
Köszi ha valaki elmagyarázza!
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
void, ha nem alkarsz értéket visszaadni, int ha valami egész számot visszaadsz. Pl. hibakódot.
Ez akkor jó, ha batch fileból hívod, vagy akár másik programból, akkor a visszatérési értékkel adhatsz vissza hibakódot, hibás futás esetén. Ha nincs ilyen szándékod, akkor void.
És nem használhatod főhadnagyként. :D
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
A szabvány szerint a void main() nem létezik:
"it shall have a declared return type of typeint, but otherwise its typeis implementation-defined. An implementation shall allow both
— (2.1)a function of () returning int and
— (2.2)a function of (int pointer to pointer to char) returning int
as the type ofmain(11.3.5)."
Forrás: Standard for Programming Language C++ ( [link] )
De itt is írnak róla: [link]
Meg itt is: [link]
Egyes fordítók/fejlesztőkörnyezetek megengedik, de nem szabványos.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
2: ennek ellenére több void-ot láttam életemben mint intet.
Bár mélyebben most c++-ozok először, egy beágyazott rendszeren. Korábban csak mikrokontrollert programoztam szórakozésból.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Különben a C99 ezt írja róla:
"(5.1.2.2.1) It shall be defined with a return type of int and with no parameters
[...]
or with two parameters
[...]
or in some other implementation-defined manner"
Az utolsó sor miatt szabványos a void main().
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
"2: ennek ellenére több void-ot láttam életemben mint intet.
Bár mélyebben most c++-ozok először, egy beágyazott rendszeren."
Beágyazott rendszereknél használatos:
"// BUT in embedded programming depending on the µC, this form is also used
void main (void);"
Forrás: [link]
"Dehogynem létezik. a C99 szabvány megengedi"
A C99 szabvány nem C++ szabvány - amiről a kérdező értekezik - hanem C-szabvány. Ne keverjük össze!
De egyébként a C-nyelv 2005-ös munkatervezete így értekezik:
"The function called at program startup is namedmain. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /*...*/ }
or with two parameters (referred to here as argc and argv, though any names may beused, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /*...*/ }
or equivalent; or in some other implementation-defined manner."
Forrás: [link]
vagy itt a 2007-es: [link]
"Az utolsó sor miatt szabványos a void main()."
Nem, nem szabványos. Egész értéket KÖTELES (shall!!!) visszaadnia.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#5 "Különben a C99 ezt írja róla"
Különben a C nem C++, a C99 pedig főleg nincs kihatással a C++ szabványára (C18-at meg sem említem).
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Beágyazottnál is int a main, még ha értelme nincs is.
Amúgy meg a C pont telibe szarja, hívhatsz full void függvényt paraméterrel, vagy paramétereset anélkül, max elszáll az egész, de miután az esetek 99%-ban édes mind1, hogy 0, 1 vagy memóriaszemét a main return értéke, így igazából mind1 mit küld vissza.
tl.dr: inteset használd az a szép.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!