2015-05-06 17 views
7

Weiß jemand über >? Betreiber? Ich habe einen Makro mit folgenden Definition, die Fehler zu werfen, aber ich habe noch nie so einen Operator bis jetzt gesehen:kennt jemand diesen mysteriösen Operator ">?" in GCC

#define MAX_SIZEOF2(a,b)   (sizeof(a) >? sizeof(b)) 
+0

Dies ist überraschend schwierig zu suchen, ich machte eine Vermutung, dass es veraltet war, da es moderne gcc es nicht erkennt. –

Antwort

4

Ich denke, es von GCC Version 4.2

Die äquivalent a >?= b entfernt wurde, ist a = max(a,b);

Aus dem Handbuch

die G ++ minimale und maximale Operatoren (‘<? 'und' >? ') Und ihre zusammengesetzten Formulare (' >?= ') und' <?= ') sind veraltet und werden jetzt aus G ++ entfernt. Code, der diese Operatoren verwendet, sollte geändert werden, um stattdessen std::min und std::max zu verwenden.

EDIT:

Von Ihre Kommentare, müssen Sie #include <algorithm> hinzufügen die std::max und std::min zu verwenden. Sie können dies auch für reference überprüfen.

+0

Gibt es ein Flag in GCC 4.8, so dass ich aktivieren kann? . Denn wenn ich std :: max verwende, bekomme ich den Fehler, dass max nicht Teil von std ist oder gibt es alternative Lösungen? –

+0

@vimalprathap: - Versuchen Sie, '#include ' hinzuzufügen. Als Referenz können Sie http://en.cppreference.com/w/cpp/algorithm/max nachsehen –

5

Die Minimal- und Maximal Operatoren sind ein deprecated gcc extension:

Der G ++ minimalen und maximalen Operatoren ('<? 'und' >? ') und deren Verbindung bildet (' >?= ') und' <?=') sind veraltet und werden jetzt aus G ++ entfernt. Code, der diese Operatoren verwendet, sollte geändert werden, um stattdessen std::min und std::max zu verwenden.

Hier ist, was die older documentation sagt:

Es ist sehr bequem Betreiber zu haben, die das „Minimum“ oder das „Maximum“ von zwei Argumenten zurück. In GNU C++ (aber nicht in GNU C),

a <? b

ist das Minimum ist, desto kleiner der numerischen Werte a und b zurückkehrt;

a >? b

ist das Maximum, den größeren der numerischen Werte a und b zurückkehrt.

Dies hatte den Vorteil, dass es erlaubt Sie Makros zu vermeiden, die Probleme mit Nebenwirkungen haben könnten, wenn sie nicht sorgfältig verwendet wurden.

3

Es ist ein deprecated non-standard operator, der das Maximum seiner Operanden gibt. GCC unterstützt das nicht mehr.

In C++ entspricht dies std::max(sizeof(a), sizeof(b)).