Эти три директивы препроцессора:
#if defined (AR7x00)
#if defined AR7x00
#ifdef AR7x00
все означают одно и то же самое: что следующий код должен быть обработан только если макрос AR7x00
в настоящее время определяется.
Директива #ifdef ...
- это просто удобная альтернатива #if defined ...
. Существует также #ifndef ...
директива; #ifndef FOO
эквивалентно #if ! defined FOO
.
Что касается круглых скобок, то синтаксис для оператора defined
допускает либо идентификатор, либо идентификатор в круглых скобках без разницы в значении. Я не совсем уверен, почему скобки необязательны; Я подозреваю, что это просто исторический. (Ссылка языка в 1978 году первого издания K&R не упоминает оператор defined
. Второе издание показывает обе формы, с и без скобок.)
Строго говоря, это не группируя скобки вида вы видите обычные выражения; они являются частью синтаксиса оператора defined
, который может использоваться только в предпроцессорах #if
. В частности, это:
#if defined ((AR7x00))
является синтаксической ошибкой.
добавляет круглые скобки вокруг 'AR7x00'. Его цель - предотвратить безумие. Если вы не знаете, что представляет собой пара круглых скобок на C, тогда прочитайте K & R. –
Этот вопрос не соответствует теме, поскольку он не демонстрирует каких-либо знаний об используемом языке. –
BTW, '# define' не является инструкцией, это директива препроцессора. –