Зачем кому-то использовать директиву препроцессора #if 1 C?

Я просматриваю исходный код C, и я не понимаю следующую часть

#if 1
typedef unsigned short PronId;             /* uniquely identifies (word,pron) pair, i.e. 
                                   homophones have different Ids */
typedef unsigned short LMId;
#define LM_NGRAM_INT
#else
typedef unsigned int LMId;
typedef unsigned int PronId;
#undef LM_NGRAM_INT
#endif

Почему кто-то делает #if 1? Не правда ли, что только первый блок будет обрабатываться?

Ответ 1

Да. Будет обработан только первый блок --- до тех пор, пока кто-то не изменит значение 1 на 0. Затем будет скомпилирован другой блок. Это удобный способ временного переключения блоков ввода кода и вывода при тестировании различных алгоритмов.

Ответ 2

Чтобы можно было быстро выбрать, какую часть компилировать, изменив #if 1 на #if 0.

Ответ 3

Я поместил это в свой код, когда мне нужно протестировать различные параметры. Обычно мой продукт будет поставляться с разными значениями по умолчанию, чем то, с чем я могу работать в среде отладки, поэтому я поместил значения по умолчанию в #if 1 и значения по умолчанию debug в #else С#warning, чтобы предупредить меня, что он создается с помощью отладки по умолчанию.

Ответ 4

Одним из основных свойств программного обеспечения является то, что компьютерная программа дешево модифицировать.

Вот почему определенный код написан таким образом, что облегчит его модификацию. Вот почему им нужны различные шаблоны, такие как "интерфейс" или "прокси".

И поэтому вы иногда видите странные конструкции вроде #if 1 - #else - #endif, единственной целью которых является легко переключить часть кода, которая будет скомпилирована, с небольшими усилиями: изменение 1 на 0.

Ответ 5

Для экспериментов с различными кодами кода.

Ответ 6

Это просто отличный способ прокомментировать большой фрагмент кода, поэтому автоматический отступ редактора не будет прерывать отступ (комментарий блока кода будет отступом как текст, а не как код).

Ответ 7

Другим способом сказать для #if true, скорее всего, был результат кода, который ранее проверял другой символ, а затем реорганизовывался всегда, чтобы быть правдой.

Ответ 8

Я использую его как kludge, чтобы упростить сворачивание кода; если я закрою раздел кода в #if 1 ... #endif, я могу сбросить его в моем редакторе. (Этот код очень мал-тяжелый и не написан мной, поэтому более традиционные способы создания огромного блока управления кодом не будут работать.)

Ответ 9

Более чистый способ сделать это, вероятно, делает что-то вроде:

#if ALGO1

#else

#endif

Но вам придется передать ALGO1 в компилятор args где-нибудь... например, в make файле, вам нужно добавить -DALGO1 = 1 (если 1 не указано, 1 предполагается). Ссылка: http://www.amath.unc.edu/sysadmin/DOC4.0/c-compiler/user_guide/cc_options.doc.html

Это больше работает... поэтому, как правило, для быстрых проверок используется #if 1. А в некоторых случаях забывают и оставляют за собой: -)