gpt4 book ai didi

C 预处理器通过连接和字符串化生成宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:34 25 4
gpt4 key购买 nike

<分区>

我有一组目标宏,我想根据选择的宏为其生成别名,如下所示:

选择宏:

#define I2C_MODULE 1

别名宏(概念形式):

#define I2C_MODULE_BASE I2C<Value of I2C_MODULE>_BASE
#define I2C_MODULE_NVIC INT_I2C<Value of I2C_MODULE>

目标宏(来 self 无法控制的外部文件):

#define INT_I2C0   24 
#define INT_I2C1 53
...
#define I2C0_BASE 0x40020000
#define I2C1_BASE 0x40021000
...

我想让预处理器根据选择宏 I2C_MODULE,但经过大量阅读 Q1 , P1以及我忘记的许多其他引用资料,我最终对它们的值进行了硬编码。下面我展示了我当前的工作定义,然后是我最后一次失败的生成宏的尝试:

什么有效:

#define I2C_MODULE 1
#define I2C_MODULE_BASE I2C1_BASE
#define I2C_MODULE_NVIC INT_I2C1

什么没用:

#define I2C_MODULE 1
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

/* Attempt 1 */
#define I2C_MODULE_BASE "I2C" STR(I2C_MODULE) "_BASE"
#define I2C_MODULE_NVIC "INT_I2C" STR(I2C_MODULE)

/* Attempt 2 */
#define _I2C_MODULE_BASE "I2C" STR(I2C_MODULE) "_BASE"
#define _I2C_MODULE_NVIC "INT_I2C" STR(I2C_MODULE)
#define I2C_MODULE_BASE _I2C_MODULE_BASE
#define I2C_MODULE_NVIC _I2C_MODULE_NVIC

编辑:我扩展了 accepted answer到达我想要的地方,如下所示:

#define PASTE2(a, b) a ## b
#define PASTE3(a, b, c) a ## b ## c

#define _I2C_MODULE_BASE(x) PASTE3(I2C, x, _BASE)
#define _I2C_MODULE_NVIC(x) PASTE2(INT_I2C, x)

#define I2C_MODULE_BASE _I2C_MODULE_BASE(I2C_MODULE)
#define I2C_MODULE_NVIC _I2C_MODULE_NVIC(I2C_MODULE)

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