Разница между "ifndef" и "если! определено" в C? - PullRequest
40 голосов
/ 23 декабря 2011

Я видел #ifndef ABC и #if !defined (ABC) в одном и том же исходном файле C.

Есть ли тонкая разница между ними?(Если это вопрос стиля, зачем кому-то использовать их в одном файле)

Ответы [ 2 ]

38 голосов
/ 23 декабря 2011

Нет, нет разницы между этими двумя при использовании таким образом. Последняя форма (с использованием defined()) полезна, когда начальные #if или одно из последующих #elif условий требуют более сложного теста. #ifdef по-прежнему будет работать, но, возможно, в этом случае будет понятнее использование #if defined(). Например, если ему необходимо проверить, определено ли более одного макроса или равно ли оно определенному значению.

Дисперсия (при использовании обоих в файле) может зависеть от конкретных тонкостей в использовании, как указано выше, или просто плохой практики из-за несовместимости.

5 голосов
/ 23 декабря 2011

В указанном вами контексте они одинаковы: вы просто проверяете наличие одного макроидентификатора.

Однако форма #if позволяет оценивать выражения, которые могут быть полезны.

...