Разница между "ifndef" и "если! определено" в C?
Я видел #ifndef ABC
а также #if !defined (ABC)
в том же исходном файле C.
Есть ли тонкая разница между ними? (Если это вопрос стиля, зачем кому-то использовать их в одном файле)
2 ответа
Нет, нет никакой разницы между этими двумя способами. Последняя форма (используя defined()
) полезно, когда начальный #if
или один из последующих #elif
условия требуют более сложного теста. #ifdef
все еще будет работать, но это может быть яснее, используя #if defined()
в таком случае. Например, если необходимо проверить, определено ли более одного макроса, или равно ли оно определенному значению.
Дисперсия (использование обоих в файле) может зависеть от конкретных тонкостей в использовании, как указано выше, или просто плохой практики из-за несовместимости.
В указанном вами контексте они одинаковы: вы просто проверяете наличие одного макро идентификатора.
Однако форма #if позволяет оценивать выражения, что может быть полезно.