Написано автором aetherFox для QB Express Issue #9
Условная компиляция является одной из тех частей программирования, которая
сидит в пыльных углах знаний программистов, но является одним из самых
гениальных дополнений в любом языке. Обычно то, что касается условной
компиляции зарезервированной для C программистов, может так же
использоваться и в FreeBASIC.
Препроцессор позволяет гибкость в изменении способа использования условной
компиляции генерируемого кода. Возьмите этот сценарий: вы отлаживаете код в
вашей программе, и вы хотите добавить дополнительный код для вывода
нескольких переменных, но удалить их в окончательном варианте. Код будет
что-то вроде этого:
#define DEBUG
#ifdef DEBUG
Print "Debug Value"
#endif 'DEBUG
Примечание вам не нужен комментарий после
#endif,
но является хорошей практикой.
В основном приведенный выше код проверяет определена ли
DEBUG, и если это так, то код между
#ifdef...#endif
будет выполнен. Хотя это может показаться глупым, это часто используется.
Если вы просто удалите одну строку в верхней части вашей программы (
#define DEBUG),
то все строки «отладочного кода» что вы добавили, будут удалены
компилятором--препроцессором из конечного файла, уменьшая его в размере.
'Turn on debugging
#define DEBUG
'Turn off debugging
#undef DEBUG
Директива
#undef отменяет
определение символа, в данном случае
DEBUG. Хотя это не строго
необходимо (можно просто закомментировать линию «
#define DEBUG»
), это делает код намного яснее и имеет и другие применения
#ifndef DEBUG
Print "Production Version"
#endif 'DEBUG
Хотя это не самый полезный пример, но он демонстрирует использование другой
директивы:
#ifndef. Эта директива
будет компилировать код, если символ, указанный после нее, не определен.
Во многих языках программирования, есть еще дополнительный вариант условной
компиляции как
#else:
#ifdef DEBUG
Print "Test Version"
#else
Print "Production Version"
#endif 'DEBUG
Конечно есть много приложений и применений этого. Кто сказал, что вам нужно
сделать это на только отладки кода? На самом деле можно проверить эффект
нового куска кода, или некоторых тестируемых процедур, просто определив имя
как TESTCODE и с помощью директив препроцессора для охвата кода при условной
компиляции:
#define TESTCODE
#ifdef TESTCODE
BulletRoutine()
TestFireRoutine()
#endif
Этот учебник является ограниченным, однако этот метод используется
профессионалами. Это облегчает программирование. Я использовал этот метод в
моем собственном коде. Чтобы увидеть этот код в действии, посмотрите
здесь.
Avinash 'aetherFox' Vora
avinashvora [at]
gmail [dot]
com.
http://avinash.apeshell.net