2014-11-05 11 views
5

Ich übersetze eine C++ Funktion, die ich vor einiger Zeit in Python geschrieben, als ich, dass mein C++ Code bemerkt die folgenden Zeilen enthält:Literal "oder" in C++ Programm?

if(MIsScaledOut()) { 
    if(DataType()==UnknownDataType or DataType()==h) 
     Descriptor = Descriptor + DataTypeString() + "OverM"; 

Es gibt eine or in there! Das lag wahrscheinlich daran, dass ich vorher von python übersetzte und vergessen habe, zu || zu wechseln.

Dieser Code kompiliert in verschiedenen Betriebssystemen, mit verschiedenen Compilern, und ich habe noch nie ein Problem damit gesehen. Ist das Standard, oder habe ich gerade so viel Glück gehabt, und darüber sollte ich mir Sorgen machen?

+3

Es ist wirklich traurig, dass jeder '||' und '&&' anstelle von 'and' und' or' verwendet. – Elazar

+2

@Elazar: Was ist traurig ist, dass perfekt cromulent Bezeichner, die oft in der Logik erscheinen, in allen Bereichen nicht verfügbar gemacht wurden. –

+3

Es macht immer Spaß, eine Sprache zu emiggen. [Es tut uns leid; Ich musste einfach ...] – Mike

Antwort

8

Nach der Erinnerung an das richtige Wort zu Google, sehe ich jetzt, dass it is listed as a C++ keyword, zusammen mit verschiedenen ähnlichen Keywords wie and, die ich nie zuvor gesehen (bemerkt?) In C++. Die reason these exist ist, weil es Kodierungen, die von der traditionellen Betreiber Schreibweisen nicht verwendet einige der erforderlichen Satzzeichen haben: {, }, [, ], #, \, ^, |, ~.

Wie @mafso darauf hinweist, können die alternativen "buchstabierten" Versionen in C verwendet werden, indem der <iso646.h> Header, der defines them as macros ist.

The question von denen dies als doppelt markiert wurde, weist auch auf die Existenz digraphs and trigraphs hin, die verwendet werden kann, um die fehlenden Zeichen zu ersetzen. (Diese Frage sagt auch "Jeder weiß Bescheid". Offensichtlich habe ich nicht ...)

+1

Denken Sie daran, auf das Häkchen zu klicken, um die Frage zu schließen. –

+0

Da dies auch mit C verschlagwortet ist, konnte festgestellt werden, dass es sich hier nicht um Schlüsselwörter (zB 'int und = 42;' ist zulässig) handelt, sondern als Makros, wenn '' enthalten ist (vgl. C11 (n1570) 7.9). – mafso

+0

@ThomasMatthews Ich muss zwei Tage warten, um meine eigene Antwort zu akzeptieren. : \ – Mike