Подтвердить что ты не робот

Разница между "ifndef" и "if! defined" в C?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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