Макросы препроцессора C - определение vs. переносимость значений и практика

Для кода, специфичного для компилятора, часто можно увидеть директивы cpp, такие как:

#if определено (__GNUC__) && (__GNUC__ >= 4)

, что является тестом препроцессора, который я обычно использую - не только для __GNUC__, но это распространенный пример. Альтернативно,

#if (__GNUC__ >= 4)

, по-видимому, удовлетворяет тем же требованиям. Есть ли потенциальные проблемы с последним? Не только с gcc, но и с любым препроцессором, соответствующим стандартам. Можно ли оценить LHS как определенное значение, даже если оно не определено? Есть ли какие-либо подводные камни во втором подходе, о которых знают какие-либо языковые юристы?

5
задан Brian Tompsett - 汤莱恩 10 April 2016 в 20:08
поделиться