带有switch / case语句的C编译器指令?

时间:2011-10-26 00:02:42

标签: c switch-statement c-preprocessor conditional-compilation

如何处理 C 中的switch-case语句?

#if defined MY_CONST && define RUN_TEST
    case TX_ERROR:
        //code here
        break;
    case RX_ERROR:
        //other code here
        break;
#endif

我在现有项目中编码,我在包含的头文件中看到上面的行(在我正在处理的文件中)。没有提到头文件中任何其他地方的“切换”!

我以前从未见过这个!如何在没有切换的情况下进行外壳切换?由于这必须是可能的,我如何在主文件的switch语句中使用这些情况?

编辑:我无法发布实际文件(许可下的代码库?),但这是一个剥离版本:

#if defined _CONFIG
    #define MY_CONST
    #define MY_INIT
    #define RUN_TEST

    static void fnInit(void);
    static void fnGo(void);
#endif

#if defined MY_CONST && define RUN_TEST
    case TX_ERROR:
        //code here
        break;
    case RX_ERROR:
        //other code here
        break;
#endif

#if defined MY_INIT && defined MY_CONST
static void fnInit(void)
{
    //code
}

static void fnGo(void)
{
    //code
}
#endif

1 个答案:

答案 0 :(得分:2)

确保永远不会定义MY_CONST

如果您引用的内容是准确的,那么您必须在switch语句的范围内包含标题,以便将结果MY_CONST定义为有意义。如果它没有嵌入宏中,那么它基本上是一个等待发生的事故。


根据修改后的内容,请确保您永远不会同时定义MY_CONSTRUN_TEST。如果标题是无法正常使用的话 - 即使您使用的是GCC并且启用了嵌套函数,也无法使用它。

从根本上说,该片段是标题中的错误。