我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
无法在GCC(3.4.6)下编译,但出现以下错误:
test.c:8: error: incompatible types in assignment
test.c:9: warning: assignment from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
现在,从我的理解(当然从C99的标准),是a和c应该是兼容的类型,因为他们履行6.2.7节的所有标准,第1款.我试着编译std=c99,也没有用.
想必我对标准的解释是错误的?
顺便说一句,出现这个问题是因为我想声明一些类似模板的宏来包装各种数据类型而不必在任何地方声明命名类型/ typedef的开销,例如一个简单的例子:
#define LINKED_LIST(T) \
struct { \
T *pHead; \ …Run Code Online (Sandbox Code Playgroud)