Trigraphs in g++ aktivieren?
-
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.
-
@Yadgar sagte in Trigraphs in g++ aktivieren?:
@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!
Der MOS 6510 gehört aber zur selben Prozessorfamilie, aufbauend auf dem MOS 6502:
Die CPU ist in Bezug auf Opcodes zum Prozessor 6502 völlig kompatibel, selbst hinsichtlich aller Maskenfehler und illegaler Opcodes (Opcode-Matrix).
Und nur darum geht es ja bei der Kompatibilität eines Compilers.
Und mit "Atari" sind deren erste 8-Bit Rechner gemeint, z.B. der Atari 800 sowie Atari Konsolen, wie z.B. Atari 5200 (in denen eben auch ein MOS 6502 verbaut war).
-
@Schlangenmensch sagte in Trigraphs in g++ aktivieren?:
In C galt früher das jede Funktion implizit
int
ist, wenn nicht anders angegeben.Das stimmt nur für K&R C. Seit ANSI C 1989/ISO C 1990 ist die korrekte Deklaration bzw. Definition Pflicht, es wurde aber noch alter Code akzeptiert, weil nun einmal sehr viel K&R C vorhanden war, und der Compiler warf eine Warnmeldung raus.
-
@Yadgar sagte in Trigraphs in g++ aktivieren?:
Ach was, COBOL... Plankalkül auf einer Z1-Emulation natürlich!
Die älteste wirklich im größeren Maßstab genutzte Programmiersprache ist FORTRAN. Es wird aber schwierig altes FORTRAN zu programmieren, weil die neuen Compiler mittlerweile die wirklich alten Dinge nicht mehr übersetzen.
P.S. Für den Atari ST gab es Turbo C. Auf dem Amiga hatte man üblicherweise Aztec C oder das von Commodore bevorzugte Lattice C genutzt.
-
@john-0 sagte in Trigraphs in g++ aktivieren?:
@Schlangenmensch sagte in Trigraphs in g++ aktivieren?:
In C galt früher das jede Funktion implizit
int
ist, wenn nicht anders angegeben.Das stimmt nur für K&R C. Seit ANSI C 1989/ISO C 1990 ist die korrekte Deklaration bzw. Definition Pflicht, es wurde aber noch alter Code akzeptiert, weil nun einmal sehr viel K&R C vorhanden war, und der Compiler warf eine Warnmeldung raus.
Das ist nicht korrekt. C89 (und das identische C90) erlauben default-int, erst mit C99 wurde dies abgeschafft:
https://port70.net/~nsz/c/c89/c89-draft.html#3.5.2Each list of type specifiers shall be one of the following sets; the type specifiers may occur in any order, possibly intermixed with the other declaration specifiers. [...] * int , signed , signed int , or no type specifiers
-
@SeppJ sagte in Trigraphs in g++ aktivieren?:
Das ist nicht korrekt. C89 (und das identische C90) erlauben default-int, erst mit C99 wurde dies abgeschafft:
Mit der Einführung von C89/C90 wurde vieles was vorher in K&R erlaubt war bzw. sogar notwendig war nicht mehr gern gesehen. K&R Style wurde als Oldstyle benannt und das auch in der Norm. Ich habe erst Anfang der 1990er C gelernt, und damals wurde es kaum noch praktiziert
int
als Rückgabetyp wegzulassen. Als Literatur nutzte ich damals die Übersetzung des K&R Buches in der ANSI C Ausgabe, was noch immer in meinem Bücherregal steht. Auch in diesem Buch wird nur beimain
der Rückgabetypint
weggelassen, die anderen Codebeispiele von selbstgeschrieben Funktionen mitint
als Rückgabetyp enthalten explizit die Typdeklaration. Bei Sekundärliteratur oder den UNIX man pages kann ich mich gar nicht daran erinnern, dass jemand den Rückgabetyp weggelassen hätte. Was wohl auch der Kompatibilität mit C++ zu verdanken ist. cfront hätte das nicht verarbeitet.Um jetzt so richtig K&R Style zu nutzen, folgendes Programm aus zwei Übersetzungseinheiten ist korrektes C89/C90.
/* foo.c */ foo(a, b) int a; int b; { return a+b; }
/* main.c */ main() { int a = 10; int b = 15; printf("a + b = %i\n", foo(a, b)); return 0; }
-
Das Besondere am Weglassen von
int
(im K&R Style) ist auch gewesen, daß dies auch bei den Parametern funktionierte:foo(a, b) { return a+b; }
Und der GCC übersetzt es immer noch: Ideone Code (hier GCC 8.3)