如何处理 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
答案 0 :(得分:2)
确保永远不会定义MY_CONST
!
如果您引用的内容是准确的,那么您必须在switch
语句的范围内包含标题,以便将结果MY_CONST
定义为有意义。如果它没有嵌入宏中,那么它基本上是一个等待发生的事故。
根据修改后的内容,请确保您永远不会同时定义MY_CONST
和RUN_TEST
。如果标题是无法正常使用的话 - 即使您使用的是GCC并且启用了嵌套函数,也无法使用它。
从根本上说,该片段是标题中的错误。