Условная компиляция
 

Написано автором 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