我试图使用令牌粘贴在C中定义一些简单的通用结构。其中一个例子如下: -
#define VECTOR(type, dimension, name) \
typedef struct Vector_##type{ \
type data[##dimension##]; \
int dim = dimension; \
}##name##;
VECTOR(int, 3, Vector3i)
根据我的理解,由于嵌入了参数,第2行和第5行必须进行标记粘贴,而第4行则不需要出于相反的原因。
然而,由于上面的简单示例导致以下错误,我似乎在理解中遗漏了一些内容: -
pasting formed '[3', an invalid preprocessing token VECTOR(int, 3, Vector3i)
pasting formed '3]', an invalid preprocessing token VECTOR(int, 3, Vector3i)
expected member name or ';' after declaration specifiers
VECTOR(int, 3, Vector3i)
~~~~~~~~~~~~^~~~~~~~~~~~
鉴于上述错误,我错过了什么以及在纯C中定义通用结构的适当方法是什么?
答案 0 :(得分:5)
您不需要对大小或类型名称进行令牌粘贴操作。
它过去常常从多个创建单个令牌,因此对Vector_##type
来说,创建一个Vector_int
令牌是有意义的。
在[##dim##]
尝试创建 单 [3]
令牌时,它没有意义。这应该是三个不同且独立的令牌:[
后跟3
,后跟]
,您可以在宏中使用[dim]
。
结构后面的typedef
名称相同。