main() rekursiv ;-)
-
shall not -> sollte nicht oder?
must not -> darf nicht
-
In diesem Falle eher "shall not" im Sinne von "so solle es sein"
Klar, dürfen darfst Du vieles, auch über Arraygrenzen hinwegschreiben - nur dass das dann keinen definierten Effekt hat.
-
In dem Fall ist es ein Gebot, aber die kann man misachten (genauso wie man sich auch nicht an den Standard halten kann). Ob das gut ist, muss jeder selber wissen.
-
Ein standardkonformer Compiler muss zumindest warnen. MSVC++ 2005 auf Warnstufe 4:
warning C4717: 'main' : recursive on all control paths, function will cause runtime stack overflow
-
Storm.Xapek.de schrieb:
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << "hallo" << endl; system(argv[0]); return 0; }
Daran hat bestimmt niemand gedacht, das zu verbieten
Hier wird auch nicht main( ) direkt aufgerufen, sondern auch der (vom Compiler generierte) Code, der main( ) "bootstrapt".
Greetz, Swordfish
-
Erhard Henkes schrieb:
Ein standardkonformer Compiler muss zumindest warnen. MSVC++ 2005 auf Warnstufe 4:
Naja, er warnt ja nicht vor Aufrufen von main, sondern vor einem drohenden Stack-Overflow...
xeatre-devel:~/src# g++-4.1 -Wall -W -pedantic -std=c++98 main.c main.c: In function 'int main()': main.c:3: error: ISO C++ forbids taking address of function '::main'
-
Erhard Henkes schrieb:
Ein standardkonformer Compiler muss zumindest warnen.
Seit wann denn das? Ich dachte warnings seien ne freiwillige Sache der Compiler-hersteller?
-
Soweit ich weiß ist main() auch nichts anderes als eine normale Funktion. Aber von main() mal abgesehen, welchen Nutzen hat eine Rekursion ohne Abbruchbedingung?
-
sascha_kib schrieb:
Soweit ich weiß ist main() auch nichts anderes als eine normale Funktion.
Das ändert aber nichts am Standard, welchen Erhard Henkes vollkommen richtig zitiert hat.
Greetz, Swordfish
-
hggdgdg schrieb:
Seit wann denn das? Ich dachte warnings seien ne freiwillige Sache der Compiler-hersteller?
Oftmals verwenden Compiler aber auch Warnungen bei Sachen, die zwar gegen den Standard verstossen, sich dennoch kompilieren lassen. Es heisst dann halt: Compilererweiterung.
Merke: nur weil es eine Warnung ist, bedeutet das noch lange nicht, dass du die Meldung ignorieren darfst.
-
Warnungen sind für mich (fast) wie Fehler Also. FIXEN!
-
Nicht nur für Dich - ich muss regelmäßig meine Betatester beschwichtigen dass meine #warning's FÜR MICH gedacht sind und nicht wirklich auf Fehler hindeuten
-
groovemaster schrieb:
hggdgdg schrieb:
Seit wann denn das? Ich dachte warnings seien ne freiwillige Sache der Compiler-hersteller?
Oftmals verwenden Compiler aber auch Warnungen bei Sachen, die zwar gegen den Standard verstossen, sich dennoch kompilieren lassen. Es heisst dann halt: Compilererweiterung.
Merke: nur weil es eine Warnung ist, bedeutet das noch lange nicht, dass du die Meldung ignorieren darfst.Das ändert aber nix daran, daß es falsch ist, daß ein standardkonformer Compiler warnen *muss*.
-
Jester schrieb:
Das ändert aber nix daran, daß es falsch ist, daß ein standardkonformer Compiler warnen *muss*.
Doch, muss er (wenigstens). Ansonsten wäre er ja nicht mehr standardkonform.