En el núcleo de Linux 3.0.4, mm/filemap.c tiene esta línea de código:uso extraño del operador condicional en Linux
retval = retval ?: desc.error;
He intentado compilar un caso similar con una mínima prueba de gcc -Wall y no recibas ninguna advertencia; el comportamiento parece idéntica a:
retval = retval ? retval : desc.error;
En cuanto a la norma C99, no puedo imaginar lo que describe formalmente este comportamiento. ¿Por qué está bien?
Eche un vistazo a http://stackoverflow.com/questions/2806255/why-would-you-use-the-ternary-operator-without-assigning-a-value-for-the-true – vhallac
Gracias, vhallac . Por lo que puedo decir, el uso de esta extensión GCC es un pequeño atajo que destruye por completo la portabilidad. –
Exactamente lo que le dije a un colega que intentó usarlo en uno de nuestros proyectos. :) – vhallac