C-Erweiterung: und>? Betreiber
Frage
Ich beobachtete, dass irgendwann ein <?
und >?
Operator in GCC war. Wie kann ich diese unter GCC 4.5 verwenden? Haben sie entfernt worden ist, und wenn ja, wann?
Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
Lösung
Aktuelle Handbücher sagen :
Die G ++ minimale und maximale Operatoren ( ‚
<?
‘ und ‚>?
‘) und ihre Verbindung Formen ( ‚<?=
‘) und ‚>?=
‘) waren veraltet und werden nun von G entfernt ++. Code dieser Operatoren verwendet, sollte stattdessen verwendenstd::min
undstd::max
geändert werden.
Eine schnelle Suche der letzten Dokumente scheint darauf hinzudeuten, dass sie sich um Version entfernt wurden 4.0 (3.4.6 enthält sie, 4.0.4 nicht).
Andere Tipps
Frühere Iterationen von g++
( nicht der C-Compiler) verwendet, um diese Operatoren für Sie die Minimal- und Maximalwerte geben aber sie haben lange für std::min
und std::max
veraltet.
Im Grunde sie gleichzusetzen (aber ohne die Möglichkeit der Doppel Auswertung von a
oder b
):
a <? b --> (a < b) ? a : b
a >? b --> (a > b) ? a : b
Im Hinblick auf die sie zu ersetzen (und Sie wirklich sollte ersetzen), können Sie so etwas wie verwenden:
Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;
oder Äquivalente mit std::min
.
Ich bin kein großer Fan von mit C / C ++ „Erweiterungen“ (vor allem diejenigen, die veraltet sind und / oder entfernt), da sie mich auf eine bestimmte Implementierung der Sprache binden.
Sie sollten niemals eine Nicht-Standard-Erweiterung verwenden, wo eine vollkommen ausreichend Standardmethode zur Verfügung.