2013-05-21 9 views
56

sah ich den folgenden Code aus einigem Legacy-Codes:Bedeutung von `??? -` in C++ Code

size_t a = 1 ???- 2 :0; 

Was bedeutet das Symbol ???- in C++ bedeuten? Wie soll ich das verstehen?

Vielen Dank!

+6

'???' muss nur in Kommentaren verwendet werden. :) –

+1

Es würde Spaß machen, eine falsche Bedeutung für diesen Operator zu finden. '??? -' könnte das 'Wirklich sein ??? Ich bin geschockt!' Operator, ein '?', das dem Compiler anzeigt, dass zum Beispiel der erste Zweig selten ist. – Patashu

+11

Obligatorischer WTF-Betreiber erwähnen: ??! ??! – chris

Antwort

96

Es ist eigentlich:

size_t a = 1 ? ~2 :0; 

??- a trigraph für ~


Trigraphen aus einer alten Ära sind ... bevor einige von uns waren sogar geboren.

Damals gab es einige Zeichen, die nicht immer unterstützt wurden. Ein unwissender Programmierer würde versuchen, ein solches Zeichen einzugeben, nur um festzustellen, dass es auf der Tastatur nicht existiert!

enter image description here
Image Source: http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305

So wurden trigraphs hinzugefügt dem Programmierer zu ermöglichen, die Funktionalität dieser Zeichen zuzugreifen, wenn sie nicht existieren (entweder in der Codierung oder von der Tastatur).

Heutzutage sind sie veraltet und verwirren den Leser effektiver, als alte Standards zu umgehen.

Entweder ist dieser Code wirklich alt, oder der Autor war ein Idiot.

+0

Ich sah die Benachrichtigung wie 10 Millisekunden bevor ich klickte und ich konnte nichts dagegen tun: p – chris

+0

Vielen Dank! Das ist mir komisch. – taocp

+15

Ich stimme für (b), der Autor war ein Idiot. 'a = 1? ~ 2: 0' ist für "a = ~ 2" lange Hand verschleiert. Der trinäre Operator ist nur aus einem Grund da: Um den Code zu verschleiern. Das Hinzufügen des Trigraphs, um die Tilde zu verschleiern, macht den Kuchen einfach eis. –

14

??- ist ein Trigraph für die Tilde ~ Zeichen; die Leitung ist äquivalent zu:

size_t a = 1 ? ~2 :0; 
6

??- ist ein trigraph für ~ Charakter. Einige andere Trigraphen sind:

??= for # 

??/ for \ 

??' for^

??! for | 

Die Verwendung von Trigraphs sind jetzt sehr selten.

+9

* "Die Verwendung von Trigraphs ist jetzt sehr selten." * - nicht in SO. –

+0

Wahrscheinlich auch auf Programmierung Puzzles und Code Golf Website – 707

+6

@Yawz Ich würde denken, sie würden mit '~' '' '' '' wenn nur für die Zeichen zählen gehen. – TankorSmash