Conditional Compilation And You
 

Written by aetherFox for 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] .
http://avinash.apeshell.net