【问题标题】:Is there a way to check that a macro is defined as a specific thing?有没有办法检查一个宏是否被定义为一个特定的东西?
【发布时间】:2017-07-22 03:41:38
【问题描述】:

据我所知,#ifdef 只能检查是否定义了宏,不能检查宏的定义。

#define MY_NUMBER 1
.
.
.
#ifdef MY_NUMBER
function();
#endif

我尝试过这样的事情:

#define MY_NUMBER 1
.
.
.
#ifdef MY_NUMBER 1
function();
#endif

编译器发出以下命令:

warning: extra tokens at end of #ifdef directive

并且不考虑宏的值(它只是被忽略)。

如何检查宏是否具有特定值?

【问题讨论】:

  • #ifdef MY_NUMBER 1 --> #if MY_NUMBER == 1

标签: c c-preprocessor


【解决方案1】:

就像在条件语句中一样,您可以在预处理器指令中使用相等 (==) 或不等式 (< / > / <= / >=):

#if MY_NUMBER == 1
  function1();
#elif MY_NUMBER == 2
  function2();
#else
  function3();
#endif

【讨论】:

  • 好的,这适用于数字,但我如何检查非数字? (例如,#ifdef 平台 WINDOWS)
  • @user_194421,您的原始评论说“对于字符串”,不幸的是,C 没有对字符串的本机支持,并且无法真正将它们与预处理器进行比较。通常,要检查平台,您只需使用 ifdef
  • 但是WINDOWS 不是字符串...它是一个令牌(更重要的是,它是一个token that can be pasted into an identifier)。 (实际上并不是说平台测试使用了这种技术。)
猜你喜欢
  • 2013-06-14
  • 2014-03-03
  • 2016-05-08
  • 2021-06-27
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多