Разница между "ifndef" и "если! определено" в C?

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам