gpt4 book ai didi

c - 如何在 C 中连接两个字符串宏?

转载 作者:行者123 更新时间:2023-12-02 03:13:54 25 4
gpt4 key购买 nike

我正在尝试为我的程序实现 VERSION 宏,它在某些情况下会被更改。

宏 VERSION 是通过 Makefile 定义的(git 信息放在那里)并且是一个字符串。现在我有一组#define'd 开关,我希望VERSION 反射(reflect)它们中的哪一个是打开的。现在看起来像下面这样 (main.h):

#define COMPLEX_DEPOSITION // This is switch. later in code it is used in #ifdef...#endif construction.

#ifdef COMPLEX_DEPOSITION
#define CD "_COMP_DEP" // this is the string I want to put in the end of VERSION
#define VERSION_ VERSION CD

#undef VERSION // this is to suppress 'macro redefinition' warning
#define VERSION VERSION_
#undef VERSION_
#endif

好吧,我遇到了很多错误,其中大部分让我认为 C 预处理器以随机顺序处理文件中的行:(

后来我有一个更复杂的东西,旨在制作 VERSION -> VERSION_WLT_GAP_2

#define WIRESLIFETIMES

#ifdef WIRESLIFETIMES
#define GAP 2
#define VERSION_ (VERSION ## "_WLT_GAP_" ## #GAP)
#define VERSION VERSION_
#undef VERSION_
#endif

我不知道该怎么做,如果这可能的话

最佳答案

当彼此相邻放置时,字符串文字会自然连接

"foo""bar""foobar" 相同。

至于第二个例子,你可能想要:

#define CAT_(A,B) A##B
#define CAT(A,B) CAT_(A,B)

#define GAP 2
#define VERSION CAT(VERSION_WLT_GAP_ , GAP)

VERSION //expands to VERSION_WLT_GAP_2

我建议使用 gcc -E/clang -E 来学习宏的工作原理,在尝试用它们编写任何复杂的东西之前。

关于c - 如何在 C 中连接两个字符串宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735363/

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