Endlosschleife --> was sagt ihr (Mein Informatiklehrer sagt wieder, dass...)
-
kpl. od das jetzt an den templates liegt aber so mit einem blick check ich nicht was du da machst

lg lolo
-
Dann verteufelt er vermutlich auch continue in Schleifen...
-
Hallo,
ich meite eigentlich sowas wie Bashar es in seimem zweiten Beispiel hat. Vielleicht war meine Ausdrucksweise falsch. Strenggenommen ist es keine Endlosschleife...naja, ihr habt mich dennoch verstanden!Kann man sagen, dass eigntlich alle Schlüsselwörter aus C++ zu nutzen sind? Andernfalls könnte man argumentieren, dass es solche sonst ja nicht geben würde. Naja, trotzdem gibt es ja immer wieder "Stilverbesserungen". Heute würde ja auch keiner mehr das schreiben:
void main() { cout << "Hello World" << endl; }lg, freakC++
-
freakC++ schrieb:
Naja, trotzdem gibt es ja immer wieder "Stilverbesserungen". Heute würde ja auch keiner mehr das schreiben:
void main() { cout << "Hello World" << endl; }Das liegt aber nicht daran dass es als nicht schön erachtet wird!
g++ main.cpp -o main main.cpp:4: Fehler: »::main« muss »int« zurückgebenDas ist also einfach nur verboten! Also nix Geschmackssache oder Stilverbesserung.
-
Mmmhh...da haste recht, aber die Nutzung von break, continue wird mir genauso als verboten dargestellt. Einmal sagt es der Compiler...einmal der Lehrer

lg, freakC++
-
Ich verwende immer break & continue wenn es Sinn macht. So einfach ist das.
Die Verwendung von irgendwelchen Abbruchvariablen die in langen Schleifen verwendet werden, führen meist zu viel unübersichtlicheren Verschachtelungen.Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
-
freakC++ schrieb:
Einmal sagt es der Compiler...
Wenn du mit Compiler den Typen meinst, dem du deinen Quelltext zum Übersetzen gibst, würde ich mir einen anderen suchen. Der soll keinen Kommentar abgeben sondern seine Arbeit erledigen.
Wenn du selber ein soclhes Programm bedienst (z.B. GCC), dann handelt es sich wohl um eine falsche Anwendung, sprich einen tatsächlichen Programmierfehler.
Auf nicht initialisierte Pointer zugreifen ist ja auch böse böse böse, nur - der Compiler meldet das nicht!
-
Ok, ich konnte mir durch eure Antworten und Meinungen ein gutes Meinungsbild verschaffen. Ich werde auch weiterhin mit break etc. arbeiten und vielleicht in der Arbeit mal auf andere Strukturen zurückgreifen.
Ich danke euch allen.
lg, freakC++
-
Fellhuhn schrieb:
Ich verwende immer break & continue wenn es Sinn macht. So einfach ist das.
Die Verwendung von irgendwelchen Abbruchvariablen die in langen Schleifen verwendet werden, führen meist zu viel unübersichtlicheren Verschachtelungen.Dito.
Ich verwende break & continue zwar selten, aber durchaus wenn es der Übersichtlichkeit förderlich ist.
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Es sei den man setzt ohnehin weitgehend auf Stackvariablen in Schleifen, oder RAII-Mechanismen.
-
freakC++ schrieb:
Kann man sagen, dass eigntlich alle Schlüsselwörter aus C++ zu nutzen sind? Andernfalls könnte man argumentieren, dass es solche sonst ja nicht geben würde.
Nein, so kann man nicht argumentieren. Es gibt z.B. das Schlüsselwort
auto, das völlig überflüssig ist (und in C++0x umgewidmet wird, weil es nie jemand benutzt). Auch von zweifelhaftem Wert istregister. Und in portablen Programmen kann nie das Schlüsselwortasmvorkommen.
Die Funktionensetjmp/longjmpsollte man auch nicht verwenden. Na und so weiter ... die Sprache enthält vieles nur aus historischen Gründen, sie macht auf keinen Fall Stilvorgaben.
-
Stimmt, da haste recht. Bei register ist ja sowieso dem Compiler überlassen, was er damit anstellt.
lg, freakC++
-
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
-
hustbaer schrieb:
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
Wenn man schon über Sinn und Unsinn von Keywords etc redet, dann löst "man" das nicht mit RAII.

-
Sehr passend zu diesem Thread, das heutige DailyWTF:
for (int i = 0; i < dtModules.Rows.Count; i++) { if (dtModules.Rows[i]["id"].ToString() == ID.ToString()) { dtModules.Rows.RemoveAt(i); i = 34598; //used to jump out of the for } }
-
Fellhuhn schrieb:
hustbaer schrieb:
Fellhuhn schrieb:
Was man bei dem ganzen break/continue/return-Gedönse mitten im Code natürlich berückstigen muss ist das freigeben eventuell angeforderten Speichers. Da kann es sonst schnell zu Problemen führen.
Sowas löst man ja auch über RAII
Wenn man schon über Sinn und Unsinn von Keywords etc redet, dann löst "man" das nicht mit RAII.

Ich steh grad völlig auf dem Schlauch. Kannst du mir das erklären?
Meinst du "man" wie in "man man" oder "man 3 printf"?
Und wenn ja, wo siehst du da jetzt die Verbindung? Und was hat das ganze mit Keywords zu tun?
-
Damit wollte ich sagen (und habe ich auch :p) das wenn man schon nichts mit den Keywords anzufangen weiß man auch keine Ahnung hat was RAII ist.
-
freakC++ schrieb:
Er sagte, man solle das mit einer Endlosschleife lösen, bei der beispielsweise eine bool Variable den anderen Wert annimmt, sobald ich "break" setzen würde. Dann wäre die Schleife auch sofort beendet.
Ist in C++ Quatsch.
Es war damals sinnvoll, als die "strukturierte Programmierung" so furchtbar modern war. Es geht nämlich darum, daß man open/close-Paare nicht trennt.for(...){ int file=open(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) break; int z=findNextShit(file,y); print(z); close(file); }Naja, davor hat man halt Angst.
Nicht, daß sowas noch vorkommen würde, aber das ist eine andere Geschichte.
Also machten wir es so:bool nochDrin=true; for(nochdrin && ...){ int file=open(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) nochDrin=false; else{ int z=findNextShit(file,y); print(z); } close(file);//wichtig! }Helau!
Ja, wenn man das konsequent so macht, trennt man nie wieder open/close-Paare. Um das noch machen zu müssen, muß man aber erstens einen Prozessor und COmpiler haben, wo Funktionsaufrufe teuer sind und man Innereien nicht Auslagern mag, und zweitens kein C++ haben, wo es taugliche Destruktoren gibt.for(...){ ifstream file(...); bla(file); foo(file); int y=findFirstShit(file); if(y==0) break;//führt close aus int z=findNextShit(file,y); print(z); //close(file);//auch close automatisch }Es ist so, daß der neuere Stil, jederzeit rauszugehen, und zwar so hart wie möglich (also return meistens noch viel besser als break), am Ende die Übersicht erhöht und Fehler vermeidet.
Der Stil des Lehrers gehört in die 70-er und frühen 80-er Jahre.
Aber egal, mach's in der Schule so, wie er will und zock die gute Note ab. Daheim mach's halt richtig. RAII gehört zu C++ und ist ein dicker Brocken in Sachen, was wann wo guter C++-Stil ist.
-
Hallo,
danke für nocheine ausführliche Antwort:Aber egal, mach's in der Schule so, wie er will und zock die gute Note ab. Daheim mach's halt richtig.
hahaha...das ist gut!
Werd ich machen!lg, freakC++
-
Fellhuhn schrieb:
Damit wollte ich sagen (und habe ich auch :p) das wenn man schon nichts mit den Keywords anzufangen weiß man auch keine Ahnung hat was RAII ist.
Ich mußte auch eben erstmal nachschlagen was das sein soll, und habe wieder nur festgestellt dass ich's sowieso schon ewig so mache. Geht mir dauernd so.
Ständig fliegen einem neue Fachbegriffe für Selbstverständliches um die Ohren.
Ist halt das alte Problem:
Schafft man mit dem Kram, hat man keine Zeit nach ständig Neuem Ausschau zu halten - und gilt bald als veraltet. Rennt man nur dem Neuen nach, kriegt man nix gebacken.
Hoffentlich gibt's bald mal 'nen Sourcecodeprocessor, der einem den Code auf die aktuelle Mode rüberschneidert.Und wo Lehrer Praxis hernehmen, möchte ich auch mal wissen.
-
Bitsy schrieb:
Schafft man mit dem Kram, hat man keine Zeit nach ständig Neuem Ausschau zu halten - und gilt bald als veraltet. Rennt man nur dem Neuen nach, kriegt man nix gebacken.
Hoffentlich gibt's bald mal 'nen Sourcecodeprocessor, der einem den Code auf die aktuelle Mode rüberschneidert.Das halte ich für sehr übertrieben. Man kann durchaus produktiv arbeiten und sich ab und dann mal etwas neues lernen, was man nicht wärend dem Studium gelernt hat.. Weiterbildung gehört sogar sehr stark in den Informatikbereich.
Und jetzt die neuen Techniken zu lernen, welche mit C++ einem vieles viel einfacher machen gehört halt zu der Sprache und wenn man das nicht will, dann sollte man halt bei C (oder bei was älterem) bleiben.
Und z.B RAII ist ja auch nichts neues.. Du sagst ja selbst, dass du die Technik bereits kennst, aber ich nehme mal an, dass du doch was gebacken gekriegt hast, oder?Und wo Lehrer Praxis hernehmen, möchte ich auch mal wissen.
Lehrer müssen nicht mal unbedingt gross Praxis haben, sodern sollten den Stoff vermitteln und die Grösse haben zu sagen, dass sie ev. nicht auf dem neusten Stand bei gewissen Dingen und nicht steif und fest behaupten, dass ihre Variante dem Heutigen Standard entspricht.