【发布时间】:2015-02-19 19:35:10
【问题描述】:
这是我正在尝试做的最小测试用例;
// minimal test case
#include <stdlib.h>
struct array {
void *ptr;
int numElements;
int capacity;
};
struct task {
char *task_name;
int task_id;
};
#define NEW_ARRAY(TYPE, VARIABLE, CAPACITY) \
struct array VARIABLE; \
VARIABLE.ptr = malloc(CAPACITY * sizeof(TYPE)); \
VARIABLE.capacity = CAPACITY; \
VARIABLE.numElements = 0 \
#define array_for_each(TYPE, ELEM, ARRAY) \
for (int i=0, ELEM = *((TYPE *)ARRAY.ptr); \
i<ARRAY.numElements; \
i++, ELEM = *((TYPE *)ARRAY.ptr + i) \
) \
int main() {
NEW_ARRAY(struct task, my_tasks, 2);
struct task tmp;
array_for_each(struct task, tmp, my_tasks) {
;
}
return 0;
}
我得到了;
test.c:22:23: hata: 初始化类型“int”时不兼容的类型 使用类型 'struct task' for (int i=0, ELEM = *((TYPE *)ARRAY.ptr); \
那个宏行展开后变成这样:
for (int i=0, tmp = *((struct task *)my_tasks.ptr); i<my_tasks.numElements; i++, tmp = *((struct task *)my_tasks.ptr + i) ) {
;
}
好的,所以 tmp 是一个 struct task,我将 my_tasks.ptr 这是一个 void * 转换为 struct task * 并取消引用它,所以应该给我一个 struct task。所以我不知道为什么 gcc 会抛出这个错误。
【问题讨论】:
-
因为您随后将
struct task分配给int类型的变量?
标签: c