如何在c中具有相同名称但不同类型的变量?

时间:2020-08-19 19:38:57

标签: c variables types

具有此标头和.c文件:

foo.h

extern void * Foo;
struct Foo { unsigned val; };

foo.c

int main(){
    void * Foo;
}

它可以正确编译,但是有2个具有2个不同类型(void*struct {...})但名称相同的变量。

那怎么可能?

编译器如何知道哪个?

1 个答案:

答案 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