#define MAX_SIZE 32
#define DECLEAR_RINGQUEUE(type) \
typedef struct RINGQUEUE_##type{ \
type data[MAX_SIZE]; \
}RINGQUEUE_##type; \
...someMethod
DECLEAR_RINGQUEUE(structA)
DECLEAR_RINGQUEUE(int*)
角色' *'影响结构的名称,我该如何解决这个问题.. 任何预处理器指令可用? 或者我必须重新声明其他定义,如
#define DECLEAR_RINGQUEUE_ptr(type) \
typedef struct RINGQUEUE_##type{ \
type* data[MAX_SIZE]; \
}RINGQUEUE_##type; \
答案 0 :(得分:1)
使用"裸体"类型,我不认为你可以在没有额外宏的情况下完成,因为int
和*
是两个独立的令牌。
所以你的单独宏是可能的,但我会稍作改动以区分int
和int*
:
#define DECLEAR_RINGQUEUE_ptr(type) \
typedef struct RINGQUEUE_ptr_##type{ \
type *data[MAX_SIZE]; \
} RINGQUEUE_ptr_##type;
正如您目前所拥有的那样,两者都会创建相同的struct
和typedef
名称,从而导致错误。
但是,如果您首先typedef
指针类型,并将其显示为一个标记,则可以使用以下内容:
typedef int* pInt;
DECLEAR_RINGQUEUE(pInt);
这应该有效,基于以下代码的事实:
#define MAX_SIZE 32
#define DECLEAR_RINGQUEUE(type) \
typedef struct RINGQUEUE_##type { \
type data[MAX_SIZE]; \
} RINGQUEUE_##type
DECLEAR_RINGQUEUE(int);
typedef int* pInt;
DECLEAR_RINGQUEUE(pInt);
在通过预处理器时生成:
typedef struct RINGQUEUE_int { int data[32]; } RINGQUEUE_int;
typedef int* pInt;
typedef struct RINGQUEUE_pInt { pInt data[32]; } RINGQUEUE_pInt;
并且编译没有错误。