gpt4 book ai didi

C 宏数据库 - 在另一个宏中测试宏函数的参数

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:25 25 4
gpt4 key购买 nike

我正在尝试创建一个 C 宏表,它采用一系列 C 函数宏,如果 C 函数宏的另一个参数满足某些条件,则将其转换为 C 函数宏的一个参数的列表。

例如,在FancyPantsTable.h中定义一个数据库:

#if defined (MY_FANCY_PANTS_TABLE)
FANCY_PANTS_DB( A, 123)
FANCY_PANTS_DB( B, 456)
FANCY_PANTS_DB( C, 456)
FANCY_PANTS_DB( D, 123)
#endif

然后,在 FancyPants.c 中,将 FancyPantsTable.h 导入到您想要制作列表的任何地方。

#define numberSought 456

uint8 my456Array [] = {

#define FANCY_PANTS_DB( aUint8, num ) #if ( num == numberSought sought ) aUint8, #endif
#define MY_FANCY_PANTS_TABLE
#include "FancyPantsTable.h"
#undef MY_FANCY_PANTS_TABLE
};

#define numberSought 123

uint8 my123Array [] = {

#define FANCY_PANTS_DB( aUint8, num ) #if ( num == numberSought sought ) aUint8, #endif
#define MY_FANCY_PANTS_TABLE
#include "FancyPantsTable.h"
#undef MY_FANCY_PANTS_TABLE
};

C 宏模板很难调试;就在 #if 处,我收到一条错误消息,提示“需要一个宏参数名称”。

我正在做的事情是否可行。我该如何解决?

最佳答案

请记住,一个宏不能定义另一个。所以像这样的行

#define FANCY_PANTS_DB( aUint8, num ) #if  ( num == numberSought sought ) aUint8, #endif

无效。预处理器只通过一次,所以你不能使用这样的东西。

如果我没记错的话,你可以这样写:

FancyPantsTable.h:

#if MY_FANCY_PANTS_TABLE==123
A,
#endif
#if MY_FANCY_PANTS_TABLE==456
B,
C,
#endif
#if MY_FANCY_PANTS_TABLE==123
D,
#endif

FancyPants.c:

#define MY_FANCY_PANTS_TABLE 456

uint8 my456Array [] = {
#include "FancyPantsTable.h"
};

#undef MY_FANCY_PANTS_TABLE
#define MY_FANCY_PANTS_TABLE 123

uint8 my123Array [] = {
#include "FancyPantsTable.h"
};
#undef MY_FANCY_PANTS_TABLE

虽然我不确定这是不是你喜欢的。

关于C 宏数据库 - 在另一个宏中测试宏函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52997448/

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