Предпроцессор предполагает, что неопределенные макросы имеют значение 0
в сравнениях, так что в этом случае ваше упрощение в порядке.Если вы хотите проверить в gcc более низкую версию, чем 4, вы можете столкнуться с проблемами, поскольку она будет оцениваться как true
с <
, даже если это не gcc.
Я думаю, что причинаиспользование обоих также является вопросом понятности, если вы проверите
#if defined(__GNUC__) && (__GNUC>=4)
, то вполне очевидно, что вы не уже в блоке с кодом, предназначенным только для GCC, в то время как упрощение
#if (__GNUC__ >= 4)
не делает этого очевидным и может быть прочитано как проверка версии, только если вы уже знаете, что это gcc.