Цель С# # "синтаксис
Я немного смущен синтаксисом "фунт if" или #if
, который я вижу, когда смотрю на некоторые классы.
Например:
#if someConstant == someNumber
do something
#elif
etc
против
if (someConstant == someNumber)
do something
else if {
do more stuff
}
какая разница и зачем использовать #if
?
Ответы
Ответ 1
#if
и т.д. являются препроцессорными директивами. Это означает, что они рассматриваются перед компиляцией, а не во время выполнения. Это может быть полезно, например, при определении поведения отладки, которое компилируется только при создании для debug
, а не release
:
#if DEBUG
#define ISRelease(x) [x release]
#else
#define ISRelease(x) [x release], x = nil
#endif
(Код предоставлен Jeff LaMarche blog.)
Таким образом, вам не нужно проходить весь код приложения непосредственно перед отправкой приложения и удалением нагрузки отладочного кода. Это всего лишь один маленький пример использования этих директив.
Ответ 2
#if
- это директива препроцессора .
if
является конструкцией языка .
Разница заключается в том, как скомпилирована окончательная программа. Когда вы используете #if
, результатом этой директивы является то, что конечная программа будет содержать эти строки. Когда вы используете конструкцию языка, выражение, которое передается конструкции, будет оцениваться во время выполнения, а не время компиляции.
Ответ 3
Предыдущие ответы охватывают #if
обычаи от отладки до терминологии и пропускают еще одно общее использование: #if
используется для комментирования больших фрагментов кода. Это полезно, когда программистам необходимо избавиться от чего-то, что уже содержит комментарии.
#if 0
a lof of C code with /* style */ comments included
#endif
Я использую это много. Преимущество над любым другим стилем #if
и комментариями - на самом деле это не волнует большую часть разбитого синтаксиса внутри него.