令牌粘贴通用结构

时间:2016-12-12 16:19:57

标签: c structure c-preprocessor

我试图使用令牌粘贴在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中定义通用结构的适当方法是什么?

1 个答案:

答案 0 :(得分:5)

您不需要对大小或类型名称进行令牌粘贴操作。

它过去常常从多个创建单个令牌,因此对Vector_##type来说,创建一个Vector_int令牌是有意义的。

[##dim##]尝试创建 [3]令牌时,它没有意义。这应该是三个不同且独立的令牌:[后跟3,后跟],您可以在宏中使用[dim]

结构后面的typedef名称相同。

相关问题