Ядро Linux полно подобных вещей (бесполезные gcc-специфичные хаки ради «безопасности типов» и других подобных соображений), и я считаю это очень плохой практикой и призываю вас не следовать ей, если кто-то не требует Вы.
pmg прав насчет цели взлома, но любой здравомыслящий человек определит min
как ((x)<(y)?(x):(y))
.
Обратите внимание, что определение ядра исключает много правильных употреблений, например, где один аргумент int
, а другой long
. Я подозреваю, что они действительно хотели исключить это несоответствия подписи, где, например, min(-1,1U)
равно 1. Лучше всего утверждать это, используя утверждение времени компиляции для ((1?-1:(x))<0)==((1?-1:(y))<0)
. Обратите внимание, что это не требует каких-либо специфичных для gcc хаков.