Pergunta
Eu observei que havia em algum momento um <?
e >?
Operador no GCC. Como posso usá -los no GCC 4.5? Eles foram removidos e, se sim, quando?
Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
Solução
Manuais recentes dizer:
Os operadores mínimos e máximos G ++ ('
<?
' e '>?
') e suas formas compostas ('<?=
') e '>?=
') foram preteridos e agora são removidos do G ++. Código usando esses operadores deve ser modificado para usarstd::min
estd::max
em vez de.
Uma pesquisa rápida dos documentos anteriores parece indicar que eles foram removidos em torno da versão 4.0 (3.4.6 os inclui, 4.0.4 não).
Outras dicas
Iterações anteriores de g++
(não o compilador C) usou esses operadores para fornecer os valores mínimos ou máximos, mas há muito tempo foram preteridos a favor de std::min
e std::max
.
Basicamente, eles equiparam (mas sem a possibilidade de dupla avaliação de a
ou b
):
a <? b --> (a < b) ? a : b
a >? b --> (a > b) ? a : b
Em termos de substituí -los (e você realmente deve substitua -os), você pode usar algo como:
Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;
ou equivalentes usando std::min
.
Não sou um grande fã de usar "Extensões" C/C ++ (especialmente aquelas que foram obsoletas e/ou removidas), pois me vinculam a uma implementação específica do idioma.
Você nunca deve usar uma extensão fora do padrão, onde um método padrão perfeitamente adequado está disponível.