其他分享
首页 > 其他分享> > c – C宏以启用和禁用代码功能

c – C宏以启用和禁用代码功能

作者:互联网

我之前使用过代码库,它有一个宏系统,用于启用和禁用代码段.它看起来像下面这样:

#define IN_USE      X
#define NOT_IN_USE  _

#if defined( WIN32 )
    #define FEATURE_A       IN_USE
    #define FEATURE_B       IN_USE
    #define FEATURE_C       NOT_IN_USE
#elif defined( OSX )
    #define FEATURE_A       NOT_IN_USE
    #define FEATURE_B       NOT_IN_USE
    #define FEATURE_C       IN_USE
#else
    #define FEATURE_A       NOT_IN_USE
    #define FEATURE_B       NOT_IN_USE
    #define FEATURE_C       NOT_IN_USE
#endif

然后,功能的代码如下所示:

void DoFeatures()
{
#if USING( FEATURE_A )
    // Feature A code...
#endif

#if USING( FEATURE_B )
    // Feature B code...
#endif

#if USING( FEATURE_C )
    // Feature C code...
#endif

#if USING( FEATURE_D ) // Compile error since FEATURE_D was never defined
    // Feature D code...
#endif
}

我的问题(我不记得的部分)是如何定义’USING’宏,以便在功能未被定义为’IN_USE’或’NOT_IN_USE’时出错?如果您忘记包含正确的头文件,可能就是这种情况.

#define USING( feature ) ((feature == IN_USE) ? 1 : ((feature == NOT_IN_USE) ? 0 : COMPILE_ERROR?))

解决方法:

您的示例已经达到了您想要的效果,因为如果未定义USING,#if USING(x)将产生错误消息.您在头文件中所需要的就像是

#define IN_USE 1
#define NOT_IN_USE 0
#define USING(feature) feature

如果你想确保你也因为做某事而得到错误

#if FEATURE

要么

#if USING(UNDEFINED_MISPELED_FEETURE)

然后你可以做,比方说,

#define IN_USE == 1
#define NOT_IN_USE == 0
#define USING(feature) 1 feature

但你无法阻止这种滥用

#ifdef FEATURE

标签:c-3,preprocessor-directive,c,macros,c-preprocessor
来源: https://codeday.me/bug/20191007/1867844.html