【问题标题】:Macro to replace undefined tokens with some predefined value用一些预定义值替换未定义标记的宏
【发布时间】:2018-02-02 10:13:55
【问题描述】:

用一些预定义值替换未定义标记的宏。

我想要一些 EXPAND(x) 宏,如果定义了 x,它将扩展为 x,例如,如果未定义,则扩展为 -1,这样代码:

#define M1 1
#define M2 2
#undef  M3
#define M4 (2*2)

printf("%i %i %i %i", EXPAND(M1), EXPAND(M2), EXPAND(M3), EXPAND(M4)); 

将打印:

1 2 -1 4

这在 C 中可能吗?我唯一能想到的是将 x 字符串化,然后使用 constexpr 函数对其进行解析,但这仅适用于简单的情况。

【问题讨论】:

  • 问题中没有特定于 C++ 的内容,因此请仅将其标记为 C。我会解决的。
  • “但这只适用于简单的情况”你为什么这么认为?

标签: c macros c-preprocessor


【解决方案1】:

这样做的唯一方法是使用一些头文件,该文件知道所有可能的宏并检查它们是否已定义。如果不是,请将它们替换为 -1。

#ifndef M1
#define M1 -1
#endif

#ifndef M2
#define M2 -1
#endif

...

然后,您将在包含宏的文件之后/在宏定义之后包含此标头。

尽管请注意这是一个糟糕的设计,充满了紧耦合和其他非常糟糕的想法。当然有更好的方法来解决实际问题,比如确保如果缺少某个宏,代码将无法编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2016-03-10
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多