【发布时间】:2011-02-23 16:23:35
【问题描述】:
我有以下代码:
int main(void)
{
struct { int x; } a, b;
struct { int x; } c;
struct { int x; } *p;
b = a; /* OK */
c = a; /* Doesn't work */
p = &a; /* Doesn't work */
return 0;
}
在GCC(3.4.6)下编译失败,报错:
test.c:8: error: incompatible types in assignment
test.c:9: warning: assignment from incompatible pointer type
现在,据我了解(诚然来自 C99 标准),a 和 c 应该是兼容类型,因为它们满足第 6.2.7 节第 1 段中的所有标准。我试过了用std=c99编译,无济于事。
大概我对标准的解释是错误的?
附录
顺便说一句,这个问题的出现是因为我想声明一些类似模板的宏来包装各种数据类型,而无需在任何地方声明命名类型/类型定义的开销,例如一个简单的例子:
#define LINKED_LIST(T) \
struct { \
T *pHead; \
T *pTail; \
}
...
LINKED_LIST(foo) list1;
LINKED_LIST(foo) list2;
...
LINKED_LIST(foo) *pList = &list1; /* Doesn't work */
【问题讨论】:
标签: c gcc type-conversion