【问题标题】:Can a MACRO be compared in #if with non numeric value [duplicate]可以在#if中将MACRO与非数值进行比较[重复]
【发布时间】:2016-08-04 06:47:37
【问题描述】:

考虑以下

#if TABLE_SIZE>200
#undef TABLE_SIZE
#define TABLE_SIZE 200

The macro TABLE_SIZE is being compared

是否有可能将其与非数值比较,例如,

#if MACRO==ABCDEF123

我试过了,但是编译器抱怨 ABCDEF123 没有被定义并假定它为 0。

【问题讨论】:

  • 重新打开,因为它也被标记为 C++,这可能会吸引建设性的基于模板的解决方案。
  • @Bathsheba,实际上我赞成您重新打开此 Q 的评论。但我意识到宏和模板在这种情况下无法相处。我不确定这个 Q 的历史。链接的 Q 之前是否只标记为重复?尽管如此,我认为除了该帖子中给出的答案之外的任何事情都是可能的。看起来,这个 Q 中的代码(使用#endif)实际上编译得很好。大多数情况下,OP 的意思是链接的 Q 中提出的任何问题。

标签: c++ c macros comparison conditional-statements


【解决方案1】:

为了真正的可移植性,#IF expression 中的表达式 只能包含整数和字符常量。 C 和 C++ 预处理器还可以计算 +、-、*、/、<<、>>、!=、== 和两个逻辑运算符 && 和 @987 @ 遵守标准 C 和 C++ 的短路规则。

所以不,你不能直接比较一个字符串。

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多