C extension: et>? les opérateurs
Question
J'observé qu'il y avait à un moment donné un <?
et opérateur >?
dans GCC. Comment puis-je utiliser ces sous GCC 4.5? Ont-ils été enlevés, et si oui, quand?
Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
La solution
dire :
G ++ minimum et le maximum des opérateurs ( «
<?
» et «>?
») et leurs formes composées ( « de<?=
») et «>?=
») sont devenus obsolètes et sont maintenant retiré de G ++. Code à l'aide de ces opérateurs devrait être modifié pour utiliser à la placestd::min
etstd::max
.
Une recherche rapide des documents passés semble indiquer qu'ils ont été enlevés dans la version 4.0 (3.4.6 inclut les, 4.0.4 ne fonctionne pas).
Autres conseils
itérations antérieures de g++
( pas le compilateur C) utilisé ces opérateurs pour vous donner les valeurs minimales ou maximales, mais ils ont longtemps été délaissé au profit de std::min
et std::max
.
En fait, ils assimilés (mais sans la possibilité d'une double évaluation de a
ou b
):
a <? b --> (a < b) ? a : b
a >? b --> (a > b) ? a : b
En ce qui concerne les remplacer (et vous avez vraiment devrait les remplacer), vous pouvez utiliser quelque chose comme:
Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;
ou équivalents en utilisant std::min
.
Je ne suis pas un grand fan de l'utilisation « extensions » C / C ++ (en particulier ceux qui ont été dépréciés et / ou enlevés) car ils me lient à une mise en œuvre spécifique de la langue.
Vous ne devez jamais utiliser une extension non standard où une méthode standard parfaitement adéquate est disponible.