Kryptische Zeile “??!??!” im Legacy-Code [duplicate]
Lesezeit: 2 Minuten
Benutzer2573221
Ich überarbeite einige sehr alter Legacy-Code, der voller Fehler und sehr fragwürdiger Praktiken ist, zumindest für moderne Standards. Jetzt bin ich auf eine Zeile gestoßen, die ich einfach nicht entziffern kann:
p und k sind vom Typ int *
return p??!??!k?p?*p:sizeof(*k):0;
Als ich es sah, traute ich meinen Augen nicht – ich kenne das ? Operator, aber seine Syntax ist bool ? trueresult : falseresult und ein ?? Operator macht weder Sinn (Lazy Evaluation trifft hier wirklich nicht zu), noch konnte ich irgendwo einen Hinweis auf diesen mysteriösen Operator finden.
Es wäre wirklich cool, wenn jemand etwas Licht in diese Angelegenheit bringen würde.
Welchen Compiler verwendest du? gcc ignoriert zum Beispiel standardmäßig Trigraphen. Und ja, das muss sein sehr, sehr alt Code, in der Tat.
– devnull
18. Juli 2013 um 8:29 Uhr
@devnull Es ist gcc, aber es ist mit einem Makefile kompiliert. Und jetzt, wo ich weiß, was Trigraphen sind, weiß ich auch, warum es ein gibt -trigraphs Flag an den Compiler übergeben 😉
– Benutzer2573221
18. Juli 2013 um 8:32 Uhr
Trigraphen (??!) sind böse; verkettete ternäre Operatoren (??::) sind auch böse; Beide in derselben Linie zu mischen ist zu viel!
– rodrigo
18. Juli 2013 um 8:52 Uhr
Das ist purer Müll. Ich gehe jetzt zur doppelten Frage, um diesen Kommentar auch dort hinzuzufügen.
Bevor irgendeine andere Verarbeitung stattfindet, wird jedes Vorkommen einer der folgenden Sequenzen von drei Zeichen (sogenannte Trigraph-Sequenzen17)) durch das entsprechende einzelne Zeichen ersetzt.
en.wikipedia.org/wiki/Digraphs_and_trigraphs#C
– qrdl
18. Juli 2013 um 8:26 Uhr
Welchen Compiler verwendest du? gcc ignoriert zum Beispiel standardmäßig Trigraphen. Und ja, das muss sein sehr, sehr alt Code, in der Tat.
– devnull
18. Juli 2013 um 8:29 Uhr
@devnull Es ist gcc, aber es ist mit einem Makefile kompiliert. Und jetzt, wo ich weiß, was Trigraphen sind, weiß ich auch, warum es ein gibt
-trigraphs
Flag an den Compiler übergeben 😉– Benutzer2573221
18. Juli 2013 um 8:32 Uhr
Trigraphen (
??!
) sind böse; verkettete ternäre Operatoren (??::
) sind auch böse; Beide in derselben Linie zu mischen ist zu viel!– rodrigo
18. Juli 2013 um 8:52 Uhr
Das ist purer Müll. Ich gehe jetzt zur doppelten Frage, um diesen Kommentar auch dort hinzuzufügen.
– Daniel Daranas
18. Juli 2013 um 9:51 Uhr