3.7 typedef struct foo {...foo;}的含义
C 语言存在多种名字空间:
标签名(label name);
标签(tag)---这个名字空间用于所有的结构、枚举和联合;
成员名---每个结构或联合都有自身的名字空间;
其他。
在同一个名字空间里,任何名字必须具有唯一性,但在不同的名字空间可以存在相同的名字。
struct vnode {
long v_flag;
long v_usecount;
struct vnode *v_freef;
struct vnode *v_op;
};
#include <stdio.h>
#include <stdlib.h>
struct foo {
int foo;
int foo2;
} foo;
/*
** typedef struct foo foo;
** because of [Error] 'typedef struct foo foo' redeclared as different kind of symbol
** and [Note] previous declaration 'foo foo'
*/
typedef struct foo foo2;
int main() {
printf("sizeof(foo) = %zd, sizeof(struct foo) =