Ich bin ein sehr erfahrener C-Programmierer, aber kürzlich bin ich auf einen Code auf einem Mainframe gestoßen, der eine lokale Variable hat. Dies ist in einer einfachen C-Funktion, die diese Variable deklariert, und dann strcpy
/ strcat
s zwei Saiten hinein und versucht dann eine fopen
.
char foo(|10|);
Dieser Code ist sehr alt. Eventuell sogar K&R C alt. Ich frage mich, ob dies eine obskure Compiler-Erweiterung oder eine Anpassung an eine Tastatur ist, die keine hat [] oder etwas ähnliches.
Weiß jemand, ob diese Erklärung “besonders” ist?
Dies ist ein Standard-Z/OS-Mainframe. Ich bin mir nicht sicher, welcher Compiler verwendet wird.
Es scheint eine frühe oder nicht standardmäßige Form des Digraphen zu sein. Der Code wurde wahrscheinlich mit geschrieben EBCDIC anstelle von ASCII und EBCDIC nicht [ ]
Zeichen (zumindest nicht in allen Codepages).
ich fand die Handbuch für SAS/C, ein C-Compiler, der offenbar für System/370 gedacht war. Auf Seite 2-10 (Seite 42 des pdf) können Sie die Liste sehen (| |)
als “alternative Formen” für [ ]
.
(Obwohl anscheinend |
ist auch nicht in allen Codepages; aber vielleicht war es in einer Codepage, die häufiger verwendet wurde? Ich weiß nicht.)
C99 enthielt auch Digraphen (und Trigraphen), um dasselbe Problem zu lösen, aber sie verwendeten <: :>
wie die Digraphen, und ??( ??)
für die Trigraphen.
Es ist ein IBM-Mainframe … ist es möglich, dass die Zeichencodierung ist EBCDIC? Glaubt man Wikipedia, fehlte das
[ ]
Zeichen, so dass ein C-Compiler, der mit EBCDIC-Quellen arbeiten soll, möglicherweise einen Ersatz definieren musste.– Nate Eldredge
15. Dezember 2022 um 4:39 Uhr
… obwohl C genau für diesen Zweck Trigraph-Sequenzen definiert. Aber vielleicht ist das eine nicht standardisierte / vorstandardisierte Alternative.
– Johannes Bollinger
15. Dezember 2022 um 4:43 Uhr
@NateEldredge Könnte sein, aber diese Seite wird auch angezeigt
|
als nicht unbedingt vorhanden.– dbusch
15. Dezember 2022 um 4:44 Uhr
Diese Frage würde auch auf Retrocomputing.SE gut ankommen
– OmarL
15. Dezember 2022 um 16:07 Uhr