【发布时间】:2022-01-19 15:12:11
【问题描述】:
我在下面有一个 typedef
typedef struct arr_s {
void** arr;
} *arr_t;
是否可以定义一个宏,使其像这样扩展:
arr_t k;
k(i) will expand to k->arr[i];
【问题讨论】:
-
你试过简单的
#define k(i) k->arr[i]吗? -
OT:不要将指针隐藏在类型定义后面。如果您绝对愿意,请使用显示指针性质的类型名称。
-
-
当然,
s(i)不起作用。您将如何使用没有名称的宏?您可以尝试#define x(a, i) a->arr[i]并通过x(k, i)或x(s, i)使用它。 -- 无论如何,你为什么要使用宏?这是XY problem吗? -
在 C++ 中,您可以为结构实现
operator(),但您使用的是 C。