2010-08-09 24 views
37

Observé que había en algún momento un operador <? y >? en GCC. ¿Cómo puedo usar estos bajo GCC 4.5? Han sido eliminados, y si es así, ¿cuándo?C extensión: <? and >? operadores

Offset block_count = (cpfs->geo.block_size - block_offset) <? count; 
cpfs.c:473: error: expected expression before ‘?’ token 
+0

Tenga en cuenta que esta pregunta es específica de C. –

+0

¿De dónde viene todo el amor para esta pregunta? ¡Gracias! –

+0

Similar coincidencia con las etiquetas de formato abreviado de PHP smci

Respuesta

38

manuales recientes say:

El mínimo G ++ y operadores máximos ('<? 'y' >? ') y sus formas compuestas (' <?= ') y' >?=') han quedado en desuso y ahora se eliminan de G ++. El código que utiliza estos operadores debe modificarse para usar std::min y std::max.

Una búsqueda rápida de los documentos anteriores parece indicar que se eliminaron en la versión 4.0 (3.4.6 los incluye, 4.0.4 no).

+1

Puede haber leído mal, ¿solo estaban disponibles en G ++? –

+0

@Matt Joiner, eso es lo que dicen los documentos, sí: "GNU C++ (pero no en GNU C)". –

+4

Me gustaría dar +1 si puede proporcionar un enlace. –

8

iteraciones anteriores de g++ (no el compilador C) utilizan estos operadores para darle los valores máximo y mínimo o larga pero han estado en desuso en favor de std::min y std::max.

Básicamente, se equiparan a (pero sin la posibilidad de una doble evaluación de a o b):

a <? b  -->  (a < b) ? a : b 
a >? b  -->  (a > b) ? a : b 

En cuanto a la sustitución de los mismos (y que realmente debe reemplazarlos), puede use algo como:

Offset block_count = cpfs->geo.block_size - block_offset; 
if (block_count > count) block_count = count; 

o equivalentes usando std::min.

No soy un gran admirador de usar "extensiones" C/C++ (especialmente aquellas que han sido obsoletas o eliminadas) ya que me atan a una implementación específica del lenguaje.

Nunca debe utilizar una extensión no estándar donde esté disponible un método estándar perfectamente adecuado.

Cuestiones relacionadas