gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:36:14 27 4
gpt4 key购买 nike

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

我想要一些 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 函数解析它,但这仅在简单的情况下有效。

最佳答案

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

#ifndef M1
#define M1 -1
#endif

#ifndef M2
#define M2 -1
#endif

...

然后,您可以在包含宏的文件之后/在宏定义之后包含此 header 。

但请注意,这是一个糟糕的设计,充满了紧密耦合和其他令人难以置信的糟糕想法。当然有更好的方法来解决实际问题,例如确保如果缺少某个宏,代码将无法编译。

关于c - 用一些预定义值替换未定义标记的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com