main (Anfänger)
-
SpIriT alias PrOjEcT101 schrieb:
also main() ist ja auch nix weiter als eine Funktion. Bei void main() stellt das void den Rückgabetyp dar.
Schon, nur dass für main der Rückgabetyp int vorgeschrieben ist.
Ein alleinstehendes main() hab ich noch nie gesehen.
Da müsstest du dir mal älteren C-Code angucken, das war bis C99 noch erlaubt. Wenn in einer Deklaration der Typ fehlte, wurde automatisch int angenommen.
-
Genaugenommen sind andere Varianten laut Standard sogar erlaubt,
da der Standard hier mal wieder verdammt konkret formuliert istAn Implementation shall not predefine the main function. This function shall not
be overloaded. It shall have a return type of type int, but otherwise its
type is implementation-defined.[...]Danach werden, dann aber doch noch die 2Pflicht-Varianten vorgestellt
-
Ich wart ja immer noch auf
[cpp]
int main(const std::vector< const std::wstring >& args)
{
}
[/cpp]
-
SirLant schrieb:
Genaugenommen sind andere Varianten laut Standard sogar erlaubt,
da der Standard hier mal wieder verdammt konkret formuliert istVerstehe ich nicht. Wo ist da zB
string main(map<int, double> m)
oder ähnliches erlaubt?Implementation Defined heisst ja nur, dass der Compiler mehr erlauben darf - aber nicht muss. Das ist natürlich sehr wichtig, weil manchmal eben noch ein zeiger auf environment variablen oder ähnliches mitgegeben wird...
-
das wusste ich nicht ... danke für diese Info.
Hm irgendwie kann man sich nicht mehr auf den Standard verlassen@Bashar: hab das ja in meinem Beitrag weiter unten noch geschrieben das der Datentyp int für main() vorgeschrieben ist ^^
schönen Abend noch
mfg
-
SirLant schrieb:
Und man kann inzwischen auch ruhigen gewissens in C das void in der Parameterliste weglassen, da diese Regel nur in sehr alten C Versionen galt.
~% >a.c int main() { return 0; } void foo() { main(1,2,3); } ~% gcc -W -Wall a.c ~% gcc -std=c99 -W -Wall a.c ~% gcc --version gcc (GCC) 3.3.4 (Debian 1:3.3.4-11)
Gibt nichtmal eine Warnung
/* nicht nur auf main() bezogen, was man wohl eh nicht aufrufen sollte */
-
SirLant schrieb:
In C musste man früher das void in die Parameterliste schreiben, da früher
einmal eine leere Parameterliste ne andere Bedeutung hatte.
[...]
Und man kann inzwischen auch ruhigen gewissens in C das void in der Parameterliste weglassen, da diese Regel nur in sehr alten C Versionen galt.Nein, die Regel gilt immer noch. Leere Parameter-Liste = Funktionsdeklaration im K&R-Stil, beliebige Argumente übergebbar. Nicht-leer oder void angegeben = ANSI-C Prototyp, Argumentliste muss mit Parameterliste übereinstimmen (Ellipsen ausgenommen). Falls also jemals ein Grund bestanden hat, das void hinzuschreiben, so besteht dieser in C99 immer noch.
Nun ist es bei main aber im Grunde egal, ob sie einen Prototypen hat oder nicht, sie darf eh nicht aufgerufen werden. Bei anderen Funktionen sollte man darauf achten, Prototypen zu definieren.
-
Dachte, dass das nur in Uralten Versionen mal so war, wieder was gelernt
-
wieso haben die die main net static gemacht so wie in java ?
das ergibt doch sinn, weil es nur eine main in einem programm gibt
-
main ist in C++ auch nicht auf ein Objekt bezogen.