我有以下 typedef
typedef struct {
const char *name;
void *variable;
int type;
int *present;
} parse_t;
和结构具有一个变量和一个具有相同名称的整数,并附加了一个 _b。
例如:
typedef struct {
char test[12];
int test_b;
long id;
int id_b;
} record_t;
我正在尝试做的是一个宏来定义parse_t
结构中的记录,它将根据变量的类型编写它;
例如:
record_t record;
prase_t parse[] =
{
ROW("TEST", record, test, TYPE_STRING);
ROW("ID", record, id, TYPE_INT);
}
使用 ROW 执行以下操作:
- 设置名称值
- 根据类型,如果是
TYPE_STRING
,则record.<variable>
用作变量,否则使用&(record.id)
- 设置类型值
- 将 _b 附加到传递给宏的变量名并在行中使用它。
我尝试了很多选择,最接近的是以下
#define ROW(x, y, z, v) {x, (TYPE_STRING == v) ? y.z:&(y.z), v, &(y.z##_b)}
但我在使用它时遇到如下错误
The ":" operator is not allowed between "char[4]" and "char(*)[4]".
我很感激任何帮助。我想我总是可以使用两个不同的宏,一个用于字符串类型,另一个用于 int,例如,我试图尽可能地简化它。