goto's verwenden
-
rüdiger schrieb:
gotos vermeidet man, wie bereits gesagt wurde, dadurch das man Funktionen benutzt. Man schreibt viele kleine Funktionen.
Tendiert manchmal zu ekligem Code, besonders wenn man Hilfsstrukturen einführen muß um verschiedene Endzustände der Schleife zurückzugeben.
-
Daniel E. schrieb:
rüdiger schrieb:
gotos vermeidet man, wie bereits gesagt wurde, dadurch das man Funktionen benutzt. Man schreibt viele kleine Funktionen.
Tendiert manchmal zu ekligem Code, besonders wenn man Hilfsstrukturen einführen muß um verschiedene Endzustände der Schleife zurückzugeben.
Halt die Frage, was man als eklig empfindet..
-
Hilfsstrukturen einzuführen, die man nur einmal benutzt, ist wenigstens nicht besonders elegant ... ob ein goto eleganter ist? Keine Ahnung.
-
Marc++us schrieb:
Die Anwendung würde ich gerne sehen, wo man #include "code.c" braucht und keine Funktion verwenden kann...
eine anwendung wäre z.b. ein code, der den prozessorstack nicht verändern darf (aus welchem grund auch immer). manche codegeneratoren, z.b. dieser hier: http://www.cs.vu.nl/~eliens/documents/libero/lrintr.htm machen sowas.
-
net schrieb:
Marc++us schrieb:
Die Anwendung würde ich gerne sehen, wo man #include "code.c" braucht und keine Funktion verwenden kann...
eine anwendung wäre z.b. ein code, der den prozessorstack nicht verändern darf (aus welchem grund auch immer). manche codegeneratoren, z.b. dieser hier: http://www.cs.vu.nl/~eliens/documents/libero/lrintr.htm machen sowas.
Du sprichst komischerweise immer nur von Sonderfällen. "Wenn ein Funktionsaufruf zu teuer ist", "wenn man den Stack nicht verändern darf" etc. Dann ist ein goto meinetwegen auch in Ordnung. Aber das ist ja überhaupt nicht die Frage und für 99,99% der Programmierer in dem Forum auch wenig interessant.
Beim µC und Embedded-Systemen kann so etwas schon mal vorkommen. Das sind dann außnahme Situationen. Dafür muss man kein goto rechtfertigen, weil es in dem Fall vielleicht das vernünftigste Mittel ist. Ich will goto ja gar nicht dogmatisch ablehnen.
Es geht doch darum, das die Benutzung von goto normalerweise zu unübersichtlichen Code führt und eine Aufteilung in viele kleine Funktionen den Code leserlicher macht. Das ist eben ein typischer "Anfänger-Fehler", besonders wenn man einen Basic (oder gar Assembler) Hintergrund hat.
Auch bei Daniel Es Beispiel kann ein goto besser sein, als eine Hilfsstruktur oä. Das muss man eben abwiegen. Aber in 99,99% der Fälle ist es wahrscheinlich nicht nur unsinnig, sondern schadhaft.
-
net schrieb:
manche codegeneratoren, z.b. dieser hier: http://www.cs.vu.nl/~eliens/documents/libero/lrintr.htm machen sowas.
Leider kann ich mir den Quellcode nicht ansehen, da der DL nicht funktioniert, aber ich würde schon gerne den Grund dafür kennen, warum ein Codegenerator den Stack nicht verändern darf... oder der vom Generator erzeugte Code.
Daß man den Stack nicht verändern kann, riecht doch schon sehr extrem nach Embedded Programmierung oder Microcontroller, und selbst da ist's eine Ausnahme. Selbst in einer ISR auf einem µC kann man üblicherweise den Stack so zurichten wie man will.
Daraus jetzt eine Regel abzuleiten, daß man besser nicht zu viele Funktionsaufrufe in seinen Programmen verwendet erscheint mir mehr als gewagt.
-
Wenn ich mir so durchlese was manche Leute als für Vorstellungen und Ansichten haben, dann stelle ich mir ernsthaft die Frage, ob ich wirklich in die IT-Industrie möchte.
Ich hoffe doch, dass nur die Hobby-Programmierer so drauf sind (auch wenn thedailywtf.com was anderes sagt).
-
Marc++us schrieb:
Leider kann ich mir den Quellcode nicht ansehen, da der DL nicht funktioniert, aber ich würde schon gerne den Grund dafür kennen, warum ein Codegenerator den Stack nicht verändern darf... oder der vom Generator erzeugte Code.
nee, das haste falsch verstanden. dieser codegenerator erzeugt codes mit #include "irgendwas.c" darin. warum er's macht weiss ich auch nicht, aber dabei geht's jedenfalls nicht um stacknutzung...
Marc++us schrieb:
Daß man den Stack nicht verändern kann, riecht doch schon sehr extrem nach Embedded Programmierung oder Microcontroller, und selbst da ist's eine Ausnahme. Selbst in einer ISR auf einem µC kann man üblicherweise den Stack so zurichten wie man will.
auf anhieb fallen mir 2 gründe ein, warum man den eingebauten stack nicht für funktionsaufrufe benutzen darf:
1. der gesamte speicher wird für was anderes benötigt, so dass kein platz mehr für den stack da ist.
2. man nutzt die eingebauten stack-mechanismen der cpu um mit den push/pop instructions spezielle effekte zu erreichen (stackpointer wird z.b. auf 'nen i/o bereich gesetzt und man hat sich eine art DMA gebastelt).
klar, das sind sonderfälle, aber irgendwie treffe ich immer wieder auf so komische sachen...Marc++us schrieb:
Daraus jetzt eine Regel abzuleiten, daß man besser nicht zu viele Funktionsaufrufe in seinen Programmen verwendet erscheint mir mehr als gewagt.
das will ja auch keiner. funktionen sind dann schlecht (zur laufzeit) wenn sie wenig code enthalten und zudem häufig aufgerufen werden. aber in den allermeisten fällen (bei der gigahertz-megabyte-pc-programmierung) spielt das sowieso keine rolle. einverstanden?

-
rüdiger schrieb:
@pi88el
lass mich raten, du schreibst vermutlich eh kleinere Hobby-Projekte, an denen du alleine arbeitest. Dann wirst du auch nicht so schnell auf die Probleme stoßen, die goto bringt.leider muss ich dich entäuschen rüdiger, mein kleines project beinhaltet knapp 50-60 goto's die aber ausschließlich zum verlassen von verschachtelten schleifen genutzt werden, und das project ist ca. 20'000 zeilen c (und ist noch nicht mal fertig).
Freak_Coder schrieb:
for(int i=0; i<10; i++) for(int u=0; u<10; u++) if(array[i][u] == blabla) break; if(array[i][u] == blabla) break;bool run = 1; for(int i=0; i<10 && run; i++) for(int u=0; u<10; u++) if(array[i][u] == blabla) { run = 0; break; }for(int i=0; (i<10) && (array[i][u] != blabla); i++) for(int u=0; (u<10) && (array[i][u] != blabla); u++)ich habe es nicht außprobiert aber soweit ich sehe funktioniert das erste und dritte beispiel doch garnicht...

sorry das ich so spät antworte, war zu lange pennen.
-
pi88el schrieb:
mein kleines project beinhaltet knapp 50-60 goto's ...
obwohl ich goto-befürworter bin, aber das, finde ich, sind schon ziemlich viele...
-
Wo ich bin herscht CHAOS.
-
pi88el schrieb:
rüdiger schrieb:
@pi88el
lass mich raten, du schreibst vermutlich eh kleinere Hobby-Projekte, an denen du alleine arbeitest. Dann wirst du auch nicht so schnell auf die Probleme stoßen, die goto bringt.leider muss ich dich entäuschen rüdiger, mein kleines project beinhaltet knapp 50-60 goto's die aber ausschließlich zum verlassen von verschachtelten schleifen genutzt werden, und das project ist ca. 20'000 zeilen c (und ist noch nicht mal fertig).
Also arbeitest du doch alleine.
Jester schrieb:
Die dümmsten Programmierer schreiben die dicksten Programme.
-
leser der signatur schrieb:
Wo ich bin herscht CHAOS.
ist doch auch passend.
net schrieb:
obwohl ich goto-befürworter bin, aber das, finde ich, sind schon ziemlich viele...
bei 20'000 zielen finde ich 50-60 goto' irgendwie naja nicht sonderlich viel.
du müsstest mal meine assembler sachen sehen ...
@Jester
Nicht die dümmsten programmierer sondern die einsammsten, die keine prog-freunde haben und nur idioten oder Wirtschaftler als "freunde" haben
und ja ich arbeite allein.
-
Hinweis: Ich bin NICHT Jester!!!
-
Hinweis: Ich _bin_ es.
MfG,
TGGC
-
So eine goto-Diskussion ist doch immer wieder herrlich. keiner will von seinem Standpunkt abweichen und Eingeständnisse gegenüber den Argumenten des anderen machen. Und dann wunder ihr euch, warum es Kriege gibt, wenn ihr euch schon beim goto dioe Köpfe einschlagt?
Generell, und das gilt nicht nur für die Programmierung, ist es so, dass schwarz-weiß sehen meist schlecht ist. Warum kann man sich nicht datrauf einigen, dass man gotos möglichst vermeiden sollte, es aber auch Situationen gibt, in denen es sinnvoll ist ein goto zu benutzen?
Bei mir steht Übersichtlichkeit und Nachvollziehbarkeit über verhärteten Programmier Regeln, die irgenwer mal geschaffen hat, weil er meinte, er wüsste es besser.
-
i'm sorry tggc
-
Also ich bin der echte der wo Jesters Signatur kennen tut und ich bin nicht TGGC und TGGC ist auch nicht der zweite.
-
Ah man ey schrieb:
Also ich bin der echte der wo Jesters Signatur kennen tut und ich bin nicht TGGC und TGGC ist auch nicht der zweite.
volkard 
-
Luckie schrieb:
So eine goto-Diskussion ist doch immer wieder herrlich. keiner will von seinem Standpunkt abweichen und Eingeständnisse gegenüber den Argumenten des anderen machen. Und dann wunder ihr euch, warum es Kriege gibt, wenn ihr euch schon beim goto dioe Köpfe einschlagt?
Wir machen doch nur Spass! Keine Sorge wir schlagen uns nicht wegen gotos, es sein denn, einer gründet die Gotoreligion.