Volkard
-
@d_0
Volkard ist einer der Altvorderen dieses Board. Ein sehr kluger Mensch. Er hätte euch viel besser erklären können, als ich es kann, warum _fcloseall() nicht komplett sinnlos ist.Volkard hatte nichts übrig für schlampige Programmierung, soweit ich mich erinnere.
-
Volkard hatte nichts übrig für schlampige Programmierung, soweit ich mich erinnere.
Hat aber auch nicht blind akzeptiert, was andere für "schlampig" halten.
Wenn z.B. ein 'goto' irgendwo gut ist, dann nimmt man da halt ein 'goto', auch wenn 99% "schlampig" schreien.
-
Volkard hatte nichts übrig für schlampige Programmierung, soweit ich mich erinnere.
Hat aber auch nicht blind akzeptiert, was andere für "schlampig" halten.
Wenn z.B. ein 'goto' irgendwo gut ist, dann nimmt man da halt ein 'goto', auch wenn 99% "schlampig" schreien.Korrekter wäre, dass 99% der Fälle, wo jemand
goto
nutzen will, schlampig sind. Das hätte volkard auch so gesagt.
-
@SeppJ
Das widerspricht nicht dem, was ich gesagt habe.
-
Wenn z.B. ein 'goto' irgendwo gut ist, dann nimmt man da halt ein 'goto', auch wenn 99% "schlampig" schreien.
wenn ein goto irgendwo gut ist, schreit keiner "schlampig"
-
@Wade1234
Das ist übrigens kein fiktives Beispiel. Ich kann mich auch deshalb noch an die Diskussion erinnern, weil 'goto' bei mir halt auch überhaupt nicht in Betracht kommt.
Fand es dann spannend, dass man auf einem höheren Level dann wieder anfängt, die No-Gos zu hinterfragen.
-
@Wade1234 sagte in Volkard:
Wenn z.B. ein 'goto' irgendwo gut ist, dann nimmt man da halt ein 'goto', auch wenn 99% "schlampig" schreien.
wenn ein goto irgendwo gut ist, schreit keiner "schlampig"
Nur ist es halt nirgendwo gut
-
Können die Sinnlosdiskussionen nicht wenigstens in einem Thread bleiben wenn sie schon unbedingt geführt werden müssen?
-
@It0101 Nie sagen ist nie gut
Ich käme auch nie auf die Idee, das zu nutzen. War aber sehr stutzig, als Alexandrescu in irgendeinem cpp-con video ein Codeschnipsel mit goto vorlegte. Und alle warten auf das "Scherz"...war aber nicht, stattdessen so und so viel Energie für Facebook gespart.
-
@Swordfish sagte in Volkard:
Können die Sinnlosdiskussionen nicht wenigstens in einem Thread bleiben wenn sie schon unbedingt geführt werden müssen?
Was wäre daenn deiner Meinung nach sinnvoll? Wildes spekulieren, was Volkard jetzt macht?
-
@Jockelx
ja das liegt daran, dass goto sinnvoll eingesetzt auch wirklich geschwindigkeitsvorteile bringt, genauso wie man bei mikrocontrollern nicht um globale variablen herumkommt, weil die interrupthandler keine parameter übernehmen.leider ist es so, dass man erst einmal lernen muss, ohne das ganze zeug klarzukommen, daten sauber in strukturen zu packen, parameterlisten zu erstellen, funktionsaufrufe zu koordinieren usw. usf., und das geht am einfachsten, wenn man sagt, dass goto und globale variablen verboten sind.
-
@Swordfish sagte in Volkard:
Können die Sinnlosdiskussionen nicht wenigstens in einem Thread bleiben wenn sie schon unbedingt geführt werden müssen?
An denen du dich übrigens gelegentlich auch gern beteiligst.
-
Wildes spekulieren, was Volkard jetzt macht?
Da halte ich mich ganz an Dieter Nuhr.
An denen du dich übrigens gelegentlich auch gern beteiligst.
Aus Selbstschutz (sonst wird mir das Hirn sauer) und aus Mitgefühl anderen gegenüber wenn mir jemand all zu viel Blödsinn quatscht. Aber meine Hemmschwelle steigt täglich.
-
@Wade1234 sagte in Volkard:
ja das liegt daran, dass goto sinnvoll eingesetzt auch wirklich geschwindigkeitsvorteile bringt,
Nicht nur das. 'goto' kann eh nicht aus einer Funktion hinaushüpfen. Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.
Wer sich vor 'goto' fürchtet, sollte bei 'longjmp' schon fast einen Nervenzusammenbruch kriegen. Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft.
-
Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft.
No destructors for automatic objects are called. If replacing of
std::longjmp
withthrow
andsetjmp
withcatch
would execute a non-trivial destructor for any automatic object, the behavior of suchstd::longjmp
is undefined.<°)))><(
-
@Swordfish sagte in Volkard:
Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft.
No destructors for automatic objects are called. If replacing of
std::longjmp
withthrow
andsetjmp
withcatch
would execute a non-trivial destructor for any automatic object, the behavior of suchstd::longjmp
is undefined.<°)))><(
Ihr C++-Würstchen habt immer mit sehr viel Undefined zu kämpfen. Mag durchaus daran liegen, dass eure Sprache mit der heißen Nadel gestrickt wurde.
Apropos Volkard: auf C++ ließ er nichts kommen. Ein echter Ehrenmann!
-
Ihr habt immer mit sehr viel Undefined zu kämpfen. Mag durchaus daran liegen, dass eure Sprache mit der heißen Nadel gestrickt wurde.
Liegt eher daran, daß wir den ganzen C-Mist mitschleppen müssen.
-
Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.
hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:
#include <stdio.h> #include <string.h> int main() { int zahl1, zahl2; char rechenoperation; int ergebnis; int rc; start: lieserstezahl: printf("Bitte geben Sie die 1. Zahl ein: "); rc = scanf("%d", &zahl1); if(rc != 1) { goto fehlererstezahl; } printf("\n"); lieszweitezahl: printf("Bitte geben Sie die 2. Zahl ein: "); rc = scanf("%d", &zahl2); if(rc != 1) { goto fehlerzweitezahl; } printf("\n"); liesrechenoperation: printf("Bitte geben Sie das Zeichen fuer die Rechenoperation ein: "); rc = scanf("%c", &rechenoperation); if(rc != 1) { goto fehlerrechenoperation; } printf("\n"); if(rechenoperation == '+') { goto plus; } if(rechenoperation == '-') { goto minus; } if(rechenoperation == '*') { goto mal; } if(rechenoperation == '/') { goto geteilt; } goto fehlerrechenoperation; fehlererstezahl: printf("\nDie Eingabe fuer die 1. Zahl ist ungueltig.\n"); goto lieserstezahl; fehlerzweitezahl: printf("\nDie Eingabe fuer die 2. Zahl ist ungueltig.\n"); goto lieszweitezahl; fehlerrechenoperation: printf("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n"); goto liesrechenoperation; plus: printf("%d + %d = %d\n\n", zahl1, zahl2, zahl1 + zahl2); goto start; minus: printf("%d - %d = %d\n\n", zahl1, zahl2, zahl1 - zahl2); goto start; mal: printf("%d * %d = %d\n\n", zahl1, zahl2, zahl1 * zahl2); goto start; geteilt: printf("%d / %d = %d\n\n", zahl1, zahl2, zahl1 / zahl2); goto start; return 0;
und das programm ist noch klein.
-
@Wade1234 sagte in Volkard:
Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.
hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:
#include <stdio.h> #include <string.h> int main() { int zahl1, zahl2; char rechenoperation; int ergebnis; int rc; start: lieserstezahl: printf("Bitte geben Sie die 1. Zahl ein: "); rc = scanf("%d", &zahl1); if(rc != 1) { goto fehlererstezahl; } printf("\n"); lieszweitezahl: printf("Bitte geben Sie die 2. Zahl ein: "); rc = scanf("%d", &zahl2); if(rc != 1) { goto fehlerzweitezahl; } printf("\n"); liesrechenoperation: printf("Bitte geben Sie das Zeichen fuer die Rechenoperation ein: "); rc = scanf("%c", &rechenoperation); if(rc != 1) { goto fehlerrechenoperation; } printf("\n"); if(rechenoperation == '+') { goto plus; } if(rechenoperation == '-') { goto minus; } if(rechenoperation == '*') { goto mal; } if(rechenoperation == '/') { goto geteilt; } goto fehlerrechenoperation; fehlererstezahl: printf("\nDie Eingabe fuer die 1. Zahl ist ungueltig.\n"); goto lieserstezahl; fehlerzweitezahl: printf("\nDie Eingabe fuer die 2. Zahl ist ungueltig.\n"); goto lieszweitezahl; fehlerrechenoperation: printf("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n"); goto liesrechenoperation; plus: printf("%d + %d = %d\n\n", zahl1, zahl2, zahl1 + zahl2); goto start; minus: printf("%d - %d = %d\n\n", zahl1, zahl2, zahl1 - zahl2); goto start; mal: printf("%d * %d = %d\n\n", zahl1, zahl2, zahl1 * zahl2); goto start; geteilt: printf("%d / %d = %d\n\n", zahl1, zahl2, zahl1 / zahl2); goto start; return 0;
und das programm ist noch klein.
Zerlege dein Programm in Funktionen von nicht mehr als 20 Zeilen. Und du wirst sehen, dass das 'goto' nur noch halb so böse ist.
-
warum sollte ich dann goto verwenden? ein funktionsaufruf ist doch quasi goto.