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.<°)))><(
-
@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.
-
Volkard hat vor etwa 5-7 Jahren sein Interesse an der Informatik verloren, wenn ich mich richtig erinnere. Er ist auch mitterweile ueber 60. Es gibt viele etablierte Mitglieder mit tausenden von hochwertigen Beitraegen die abgedankt haben: https://www.c-plusplus.net/forum/users?section=sort-posts
Wir sollten uns mehr darauf konzentrieren, neue Expertenmitglieder hierher zu bringen, anstatt alten nachzuforschen.
-
@Wade1234 sagte in Volkard:
nein, aber entweder habe ich ganz gewaltig etwas verpasst, oder in C gibt es den befehl gosub nicht.
Du hast wohl eher die Grundlagen der Programmierung verpasst. Soll bei Quereinsteigern vorkommen, die gleich mit 4GL-Sprachen anfangen. Kann man aber nachholen.
Zu Unterprogrammen: https://en.wikipedia.org/wiki/Subroutine
Hat nicht viel mit 'goto' zu tun.
-
können wir uns darauf einigen, dass man sich goto im regelfall sparen kann, weil der compiler jede menge schlaue optimierungen durchführt (vorausgesetzt, man sagt ihm auch, dass er das tun soll), und dass es unübersichtlich ist, wenn man mit goto wild im programm umherspringt?
-
@Wade1234 sagte in Volkard:
hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:
// ...
und das programm ist noch klein.
Dafuq!? O.o
#include <stdio.h> int main(void) { for (char op = 0; op != 'q';) { int zahl[2]; for (int i = 0; i < 2; ++i) { while (printf("\nBitte geben Sie die %d. Zahl ein: ", i + 1), scanf("%d", &zahl[i]) != 1) { fprintf(stderr, "\nDie Eingabe fuer die %d. Zahl ist ungueltig.\n", i + 1); for (int ch; (ch = getchar()) != '\n' && ch != EOF;); } } do { printf("\nBitte geben Sie das Zeichen fuer die Rechenoperation ein: "); scanf(" %c", &op); if (op == '/' && !zahl[1]) fputs("\nDie Division durch 0 ist undefiniert.\n", stderr); else if (op == '+') printf("\n%d + %d = %d\n\n", zahl[0], zahl[1], zahl[0] + zahl[1]); else if (op == '-') printf("\n%d - %d = %d\n\n", zahl[0], zahl[1], zahl[0] - zahl[1]); else if (op == '*') printf("\n%d * %d = %d\n\n", zahl[0], zahl[1], zahl[0] * zahl[1]); else if (op == '/') printf("\n%d / %d = %d\n\n", zahl[0], zahl[1], zahl[0] / zahl[1]); else if (op != 'q') { fputs("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n", stderr); for (int ch; (ch = getchar()) != '\n' && ch != EOF;); op = 0; } } while (!op); } puts("\nbye!\n"); }
-
@Wade1234 sagte in Volkard:
können wir uns darauf einigen, dass man sich goto im regelfall sparen kann
Das muss doch gar nicht diskutiert werden und RBS2 sieht das sowieso nur aus Prinzip anders.
Voll der crazy-Rebell!
-
Volkard hat vor etwa 5-7 Jahren sein Interesse an der Informatik verloren, wenn ich mich richtig erinnere. Er ist auch mitterweile ueber 60. Es gibt viele etablierte Mitglieder mit tausenden von hochwertigen Beitraegen die abgedankt haben: https://www.c-plusplus.net/forum/users?section=sort-posts
Wir sollten uns mehr darauf konzentrieren, neue Expertenmitglieder hierher zu bringen, anstatt alten nachzuforschen.Woah, ich bin immer noch Nummer 1? Vor 5 Jahren hätte ich das ja verstanden, aber seither habe ich doch weniger als 1 Beitrag pro Tag. @hustbaer muss sich mal ranhalten, damit das 2020 nicht mehr so ist.
-
Volkard hat vor etwa 5-7 Jahren sein Interesse an der Informatik verloren, wenn ich mich richtig erinnere. Er ist auch mitterweile ueber 60. Es gibt viele etablierte Mitglieder mit tausenden von hochwertigen Beitraegen die abgedankt haben: https://www.c-plusplus.net/forum/users?section=sort-posts
Sehr schade.
Wir sollten uns mehr darauf konzentrieren, neue Expertenmitglieder hierher zu bringen, anstatt alten nachzuforschen.
Klar, aber die gibt es eben nicht wie Sand am Meer.
(In englischsprachigen Communities findet man tendenziell mehr Experten.)Apropos Experten:
Okay, diese Meinung ist ziemlich kontrovers, aber liegt es vielleicht daran, dass deutschsprachige C++-Communities eben heutzutage kaum Sinn machen?! Warum soll ein C++ Software Engineer hier seine Zeit verbringen, wenn a) das meiste in der Informatik-Branche eh englischsprachig ist, b) mit der deutschen Sprache potentiell nur Deutschland, Österreich und die Schweiz erreichen kann, c) das Interessante in der Softwareentwickler-Welt eben nicht hier in Deutschland passiert sondern in Amerika bzw. in der Anglosphere? Selbst Hochschuldozenten hierzulande sehen ein, dass die Vorlesungsunterlagen bzw. die Vorlesung englischsprachig sein sollen.Die Sprache Deutsch ist eigentlich überflüssig. Wenn's nach mir ginge, würde ich Englisch als Amtssprache einführen und Deutsch damit eher in den Hintergrund verdrängen. Das Ziel ist ja sowieso ein "Vereintigte Staaten von Europa". Warum also nicht gleich damit Anfangen?!
Da gibt es noch andere "Rants" bzgl. Deutschland meinerseits, aber das würde diesen Thread eher entgleisen. Ich muss mich wohl auf ein Shitstorm gefasst machen... hoffe es jedoch nicht...
(Und nein, ich bin kein Troll!)