Volkard
-
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.
-
@Swordfish sagte in Volkard:
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.
Euer Godfather Struppi wollte es so. Nun müsst ihr damit leben. Mein Mitleid hält sich in Grenzen.
-
@Wade1234 sagte in Volkard:
warum sollte ich dann goto verwenden? ein funktionsaufruf ist doch quasi goto.
Gosub, wenn schon.
-
Gosub, wenn schon.
tut mir leid, ich hab von anfang an eine vernünftige programmiersprache gelernt und kann daher kein basic.
-
@Wade1234 sagte in Volkard:
Gosub, wenn schon.
tut mir leid, ich hab von anfang an eine vernünftige programmiersprache gelernt und kann daher kein basic.
Lass dich nicht durch Begriffe verwirren. Das ist ein allgemeines Konzept: https://en.wikipedia.org/wiki/Subroutine
Eine Programmiersprache, die dir fundamentale Dinge vorenthält, finde ich nicht gut. Welche Sprache war das?
-
naja C......
-
@Wade1234 sagte in Volkard:
naja C......
Du beschwerst dich ernsthaft über zu viel Abstraktion bei C?
-
nein, aber entweder habe ich ganz gewaltig etwas verpasst, oder in C gibt es den befehl gosub nicht.