C nyelvben mi a különbség az int main (), és a main () között?
kezdő vagyok, és ezt nem nagyon értem. :)
illetve ha a voidot is használjuk, az mit jelent?
int main(void)
köszönöm szépen a segítséget.
C-ben a belépési pontot így kell megadni, kb. a programod innen indul (az előkészítési dolgokat leszámítva). A visszatérési érték kötelező, szóval nem értem mi az a main() magában.
A szabvány szerint (lásd a 13. oldalt: 5.1.2.2.1 Program startup):
a main függvénynek visszatérési értékének kell lenni, tehát a void main() és a szimpla main() nem megfelelőek (bár egyes fordítók megengedik).
C-ben lehet a belépési pont "int main(void)", "int main(int argc, char *argv[])", és ugyan a standard nem említi, de a példáiban használja, "int main()".
Visszatérési értéket érdemes adni, helyes lefutás esetén "return 0;". Ha a program eléri a main } jelét, automatikusan 0-val tér vissza amúgy.
A main() önmagában hibás! Minden függvénynél meg kell mondani milyen típusú értékkel tér vissza. Még ha nincs is visszatérési érték, akkor is oda kell írni hogy void:
void függvény() {}
C-ben a "függvény()" és a "függvény(void)" között csak a prototípus deklarációnál van különbség. A "függvény(void);" azt mondja meg, hogy a függvény nem vár paramétereket, míg a "függvény();"-nél a paraméterek definiálatlanok, azaz bármilyen paraméter definíciót lehet még adni neki. C++-ban nincs különbség köztük.
Függvény definíciónál a "függvény()" és a "függvény(void)" ugyan az, ezért lehet az "int main()"-t használni az "int main(void)" helyett, bár C-ben nem szerencsés paraméter (void) nélküli függvényekkel dolgozni, régi fordítók szólhatnak érte.
Összefoglalva, használd a következők egyikét:
int main(void) { }
int main(int argc, char *argv[]) { }
Mindig legyen a függvényeknél meghatározva a visszatérési érték típusa.
Ha nincs paramétere a függvények, akkor a paraméterben legyen odaírva hogy void, (bár ez manapság már nem kötelező).
Ti miről beszéltek? C-ben ha nem adsz meg típust azt implicit intnek hívjuk. Tehát a main az implicit int main lesz.
Az üres zárójel () meg azt jelenti, hogy variadikus paraméterek, tehát akárhány paramétert be lehet oda dúrni, ezért írják bele, hogy void.
Ha egy kezdő implicit int-eket akar használni, akkor biztos hogy megszívja (előbb-utóbb). Amúgy meg, ha 2015-ben is a 89-es ANSI szabványt tanítják neki gratulálok. Ez egy elavult megoldás, és nem összeegyeztethető az újabb szabványokkal. Tehát nincs olyan választás, hogy nem írom ki az int-et.
"C99 is for the most part backward compatible with C90, but is stricter in some ways; in particular, a declaration that lacks a type specifier no longer has int implicitly assumed."
iostream:
Nem írtam a válaszomhoz (#4), de feltételeztem hogy C99-ről van szó:
Az utolsó darft:
C99-ben nincs implicit int, de még ha lenne is, elég rossz programozási szokás használni. A draftban explicit le is írták hogy ki lett szedve ez.
Az üres zárójel csak prototípusnál jelent variadikus paraméterlistát, függvény definíciónál nem! Függvénydefiníciónál paraméter nélküli függvényt jelent. De ezt is leírtam már fentebb, és ez nem csak C99-ben van így.
Standardból idézve:
"An identifier list declares only the identifiers of the parameters of the function. An empty
list in a function declarator that is part of a definition of that function specifies that the
function has no parameters. The empty list in a function declarator that is not part of a
definition of that function specifies that no information about the number or types of the
parameters is supplied."
"Ti miről beszéltek?"
A szabványról.
"It shall be defined with a return type of int"
C99 (5.1.2.2.1 Program startup fejezet): [link]
>"It shall be defined with a return type of int"
Az ugye megvan, hogy ez NEM mondja, hogy ki kell írni az intet, mert mint említettem, implicit int is van. Azért nem feltételezem default, hogy C99-ről lenne szó, mert az nem volt olyan egyértelműen elfogadott, vannak olyan fícsörjei, amik legalábbis vitathatóak, például a variable length array.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!