В ядре Linux 3.0.4, mm/filemap.c имеет следующую строку кода:
retval = retval ?: desc.error;
Я пробовал скомпилировать подобный минимальный тестовый пример с gcc -Wall и не получать никаких предупреждений; поведение похоже на:
retval = retval ? retval : desc.error;
Глядя на стандарт C99, я не могу понять, что формально описывает это поведение. Почему это нормально?