【问题标题】:Evaluate preprocessor directives in C评估 C 中的预处理器指令
【发布时间】:2021-07-16 11:44:30
【问题描述】:

我有一个关于 C 预处理器的问题。 我已经定义了宏:

#define num2str(x)      str(x)

#define str(x) #x

我将一个数字传递给一个字符串常量:

const   char    myString[]     = num2str(NUMBER);

例如,当我输入 #define NUMBER 10 时,效果很好。 但是我想放num2str(NUMBER + 10),结果是“10 + 10”而不是“20”。 有什么方法可以计算表达式 NUMBER+10 并获得“20”?

【问题讨论】:

  • Is there *any* way.. 使用其他东西然后 C 预处理器。喜欢m4
  • 虽然 C 预处理器确实有能力评估某些简单的常量表达式,但这些结果仅可用于预处理器表达式,例如 #if 表达式。我不知道将评估结果实际放入预处理器输出的方法。

标签: c preprocessor


【解决方案1】:

在 C 中,宏替换不做算术。

有一些组合可以实现有限的算术。要确定这样的组合是否能达到您的目的,需要进一步了解您的问题。

【讨论】:

    【解决方案2】:

    宏是文本替换1,仅此而已。宏参数不被评估,它们只是在原地展开。


    1. 严格来说,它们是 token 替换,但在这种情况下区别很小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多