Trigraphs in g++ aktivieren?
-
Hi(gh)!
Als langbärtiger IT-Lumpenproletarier (was man durchaus wörtlich nehmen kann!) habe ich mir mal wieder ein uraltes C-Lehrbuch aus dem Altpapiercontainer... na ja, ganz so prekär war es nicht (wäre ja auch Diebstahl), nein, aus der "Zu verschenken"-Rubrik von kleinanzeigen.de gefischt (und mit meinem 1962er Gammel-Hercules-Dreigangrad abgeholt), und zwar die 2009er Ausgabe von Helmut ERLENKÖTTER: C - Programmieren von Anfang an... dies nur als Warnung vor den in den nächsten Wochen und Monaten von mir zu erwartenden Threads!
Im Kapitel "Erste Schritte" (S. 16ff.) werden anhand des ersten Beispiel-Listings "bspl0001.c" die Trigraphen als Workaround für exotische Systeme ohne diverse Sonderzeichen auf den Tastaturen behandelt - zugegebenermaßen ein heutzutage reichlich abstruses Thema, aber wer weiß, ob ich Retro-Freak nicht irgendwann mal mit einem 70er-Jahre-Mainframe beglückt werde (auch wenn es dann etwas eng im Wohnklo würde, obwohl, so eine PDP-12 wäre ja wirklich ein Hingucker, und wer ein 63 Jahre altes Fahrrad fährt, wird auch mit einem 56 Jahre alten Computer zurecht kommen!)...
Standardmäßig kennt g++ im C23-Modus natürlich keine Trigraphen mehr (wozu auch), aber Google ist bei solchen Themen tatsächlich ein Freund: einfach -trigraphs noch vor den Programmtext-Dateinamen in die Kommandozeile, und der Code wird anstandslos kompiliert! Womit dieses Posting eigentlich überflüssig wäre...
Aber ich möchte hier gerne auch mal Erfolgserlebnisse schildern, nicht länger über meine Qualen in der Fehlersuch-Hölle jammern und mich dann früher oder später rasend vor Selbsthass in einschlägige historische Superlative des Schreckens wünschen!
Apropos Retrocomputing: da z. B. der Commodore 64 Zeichen wie den Backslash gar nicht auf seiner Tastatur hat, wäre ein C-Compiler für den "Brotkasten" doch z. B. eine sinnvolle Implementation für Trigraphen?
Was ich allerdings nicht verstehe: wieso verwendet Erlenkötter in seinen C-Listings main() ohne Rückgabetyp (wie ich beim flüchtigen Durchblättern feststelle, durch das ganze Buch hindurch)? Ergibt das didaktisch irgendeinen Sinn? g++ wie auch gcc beschweren sich jedenfalls jedes Mal, mit oder ohne -std=c99...
Bis bald im Khyberspace!
Yadgar
-
In C galt früher das jede Funktion implizit
int
ist, wenn nicht anders angegeben. Ich meine gelesen zu haben, dass das mit C99 aufgehoben worden ist.Wenn das in dem Buch nicht erklärt ist, ist es didaktisch nicht sinnvoll und spricht nicht unbedingt für ein gutes Lehrbuch.
-
-
@Schlangenmensch sagte in Trigraphs in g++ aktivieren?:
Wenn das in dem Buch nicht erklärt ist, ist es didaktisch nicht sinnvoll und spricht nicht unbedingt für ein gutes Lehrbuch.
Es ist vor allem von 1999, keine Ahnung wie Yadgar auf 2009 kommt. Wenn, dann war das bloß ein Nachdruck, aber keine neue Ausgabe.
-
Hi(gh)!
@SeppJ sagte in Trigraphs in g++ aktivieren?:
Es ist vor allem von 1999, keine Ahnung wie Yadgar auf 2009 kommt. Wenn, dann war das bloß ein Nachdruck, aber keine neue Ausgabe.
Ja, stimmt, es ist die 16. Auflage aus dem Jahr 2009, das Copyright datiert aber von 1990/99... dann müsste laut https://en.wikipedia.org/wiki/C_(programming_language)#History C90 im Buch dargestellte Standard und folglich -std=c90 die richtige Einstellung für g++/gcc sein, wenn die Programmbeispiele ohne lästige Warnungen oder gar Fehlermeldungen laufen sollen!
(und hätte ich mich nicht vorhin, getriggert durch den Wolfs-Thread in "Jenseits der Programmierung" (warum gibt es diesen Offtopic-Quatsch überhaupt in Programmierforen?) an den Rand einer GSG-9-Razzia/Zwangseinweisung nach PsychKG/Totstiefelung durch genervte Nachbarn in sadomasofaschistische Selbstvernichtungsphantasien hineingesteigert, wäre ich mit dem Kapitel "Erste Schritte" (man lernt ja immer noch Neues dazu, wie eben diese Trigraphen...) jetzt wohl schon fertig...)
Aber C auf dem C64 (oder auch dem Atari 1040 STFM, beide Systeme sind hier vorhanden) wäre wirklich mal interessant...
Bis bald im Khyberspace!
Yadgar
-
Hi(gh)!
So, gcc -std=c90 ... ist wohl definitiv der richtige Weg, dann braucht es auch kein -trigraphs! Auf geht's, Datahedin...
Bis bald im Khyberspace!
Yadgar
-
1999 war also schon eine neue Ausgabe und das Original ist von 1990? Das ist wirklich alt. Aber so viel hat sich bei C eigentlich gar nicht getan. Wenn du für C89 (oder C90) compilierst, sollte das tatsächlich alles funktionieren. Auch auf dem C64 mit Trigraph-Sequenzen. Und von C89 zu C23 ist kein so wesentlicher Unterschied, dass man später alles umlernen müsste. Den wesentlichsten Unterschied, das default-int, hast du ja schon gefunden.
Was man wohl 2078 macht, wenn C seine C78-Variante einholt?
-
Mit cc65 gibt es einen Cross-Compiler für 6502-Maschinen (u.a. C64 und Atari).
Da ist dann nur die Frage, wie man das Executable dann auf eine Floppy kopiert?Ansonsten schau auch mal in C - C64-Wiki.
-
Hi(gh)!
@SeppJ sagte in Trigraphs in g++ aktivieren?:
1999 war also schon eine neue Ausgabe und das Original ist von 1990? Das ist wirklich alt.
Als notorischer Vintage-Freak (der schon als Kind am liebsten mit Oldtimer-Modellautos gespielt hat, später dann Geschichte studiert und mit ganz wenigen Ausnahmen einen Bogen um alle Musik macht, die nach 1985 erschienen ist... und meine völlig anachronistischen Vorlieben in Sachen Reiseziele dürften auch hier allgemein bekannt sein) stehe ich auf alten Käse, je gammeliger und stinkiger, desto mmmmmhhhh... daher muss ich irgendwann auch mal mit COBOL anfangen! Ach was, COBOL... Plankalkül auf einer Z1-Emulation natürlich! Und dazu dann "Living in the Past" von Jethro Tull auf den Ohren... oder lieber Trautonium- (Hindemith, Genzmer) und Novachord-Musik (Eisler) aus den 1940ern?
Aber so viel hat sich bei C eigentlich gar nicht getan. Wenn du für C89 (oder C90) compilierst, sollte das tatsächlich alles funktionieren. Auch auf dem C64 mit Trigraph-Sequenzen. Und von C89 zu C23 ist kein so wesentlicher Unterschied, dass man später alles umlernen müsste. Den wesentlichsten Unterschied, das default-int, hast du ja schon gefunden.
Was man wohl 2078 macht, wenn C seine C78-Variante einholt?
Dann bin ich 109 Jahre alt und hoffentlich noch (notfalls mit jeder Menge Lithium im Schleimcomputer) geistig fit genug, um seit über 50 (strenggenommen seit über 80, meine allererste Begegnung mit C hatte ich 1992 in einem VHS-Kurs, brachte damals allerdings nicht viel, weil ich keinen Compiler zum Üben für meinen (damaligen) Atari 1040 STFM hatte) Jahren fröhlich vor mich hin C programmiert haben zu werden... hach, Futur II, ich liebe es...
Bis bald im Khyberspace!
Yadgar
-
Hi(gh)!
@Th69 sagte in Trigraphs in g++ aktivieren?:
Mit cc65 gibt es einen Cross-Compiler für 6502-Maschinen (u.a. C64 und Atari).
6502? Die CPU im C64 ist eine MOS 6510, und die 16bit-Ataris (wie auch die Ur-Macs und Amigas) verwenden die 68xxx-Serie von Motorola!
Da ist dann nur die Frage, wie man das Executable dann auf eine Floppy kopiert?
Vielleicht mit einem X1541-Kabel? Das soll allerdings laut Forum64 auch schon lange nicht mehr state of the art sein... es gibt mittlerweile auch gigabytegroße USB-Massenspeicher, die sich sowohl an den PC wie auch an den "Cevi" anschließen lassen, eine polnische Firma stellt die Dinger her und vertreibt sie für 79 Euro das Stück...
Ansonsten schau auch mal in C - C64-Wiki.
Also, so richtig toll sieht das ja nicht aus... alles proprietäre Software, die man legal nirgendwo mehr bekommt (und in der C64-Szene war die GNU-Idee ja nie weit verbreitet), da wäre es vielleicht wirklich sinnvoller, nochmal ganz neu einen C-Compiler zu entwickeln und den dann als freie Software in der Szene zirkulieren zu lassen! Aber das ist erstmal noch Zukunftsmusik - wer es wie ich, metaphorisch ausgedrückt, mit Ach und Krach auf den Drachenfels schafft, besteigt als Nächstes ja auch nicht den Mount Everest!
Bis bald im Khyberspace!
Yadgar
-
Bei Kassetten gibt es ja künstliche Kassetten, die beliebige Daten emulieren können. Aber bei einer Floppy ist das ungleich schwieriger, weil der Lesekopf viele Positionen haben kann, anstatt fix an einer Stelle zu sitzen. Aber cool wäre das, wenn das jemand bauen würde. Dann könnte man das Originaldiskettenlaufwerk wie eine Festplatte nutzen.