gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:07 24 4
gpt4 key购买 nike

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

最佳答案

确保从未定义MY_CONST!

如果您引用的内容是准确的,那么您必须将 header 包含在 switch 语句的范围内,才能使定义了 MY_CONST 的结果有意义.如果它没有嵌入到宏中,那么它基本上是一个等待发生的意外。


对于修改后的内容,请确保您永远不会同时定义MY_CONSTRUN_TEST。如果 header 是正确的,则无法正常使用 header ——即使您使用的是 GCC 并启用了嵌套函数也是如此。

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

关于带有 switch/case 语句的 C 编译器指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com