C语言 宏来确定是否设置了另一个宏

0h4hbjxa  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(153)

在我的代码中,我经常有这样的结构:

#ifdef SOME_MACRO
int some_value=1;
#else
int some_value=0;
#endif

// ...

if (some_value)
{
    // ...
}

为了清楚起见,我希望有这样的东西:

if (MACRO_IS_DEFINED(SOME_MACRO))
{
    // ...
}

这可能吗?如果是的话,是怎么做到的?

wn9m85ua

wn9m85ua1#

一般的最佳实践是将预处理器“编译器开关”(#ifdef)和其他类似的预处理器技巧远离应用程序逻辑,理想情况下将其集中到.c文件的顶部或将其放置在一些合适的头中。或者通过外部版本控制而不是预处理器来处理程序的不同版本。
在这种情况下,它可能是这样的:

#if defined(SOME_MACRO) && SOME_MACRO
  #define SOME_MACRO_IS_SET 1
#else
  #define SOME_MACRO_IS_SET 0
#endif

然后是if(SOME_MACRO_IS_SET)

相关问题