具有此标头和.c文件:
foo.h
extern void * Foo;
struct Foo { unsigned val; };
foo.c
int main(){
void * Foo;
}
它可以正确编译,但是有2个具有2个不同类型(void*
,struct {...}
)但名称相同的变量。
那怎么可能?
编译器如何知道哪个?
答案 0 :(得分:1)
struct Foo
是您创建的类型,Foo
不是声明的变量,它是类型名称的一部分。
名称为struct Foo
的{{1}}类型的变量将被声明如下:
Foo
只有这样,两个变量才会具有相同的名称:
struct Foo Foo;
^^^^^^^^^^ ^^^
|| |
type name
此代码将产生预期的错误:
struct Foo { unsigned val; }; //new type extern void* Foo; // variable named Foo of type void* struct Foo Foo; // variable named Foo of type struct Foo