In 3.0.4 kernel di Linux, mm/filemap.c ha questa riga di codice:uso Bizzarro di operatore condizionale in Linux
retval = retval ?: desc.error;
Ho provato la compilazione di un simile banco di prova minimo con gcc -Wall e non ricevere avvisi; il comportamento sembra identico a:
retval = retval ? retval : desc.error;
Guardando lo standard C99, non riesco a capire che cosa descrive formalmente questo comportamento. Perché è OK?
Dai un'occhiata a http://stackoverflow.com/questions/2806255/why-would-you-use-the-ternary-operator-without-assigning-a-value-for-the-true – vhallac
Grazie, vhallac . Per quanto ne so, usare questa estensione GCC è una piccola scorciatoia che distrugge completamente la portabilità. –
Esattamente quello che ho detto a un collega che ha cercato di usarlo su uno dei nostri progetti. :) – vhallac