结构类型和变量名称

时间:2010-11-11 04:26:00

标签: c

大家好 我只是想知道我们是否可以将变量名称声明为结构名称。

例如

typedef struct
{
  char c;
}t;

然后在某些功能中可以使用

fun()
{
  t t;
}

这是有效的吗?如果是,那么编译器如何区分它们?

5 个答案:

答案 0 :(得分:3)

是的,它是有效的。如果这样做,那么结构类型将隐藏在封闭范围内,t仅指向声明的变量。

答案 1 :(得分:3)

是的,但你为什么要这样做?如果您希望错误和错误在您的项目中茁壮成长,那么请继续前进并在类型后命名变量。

答案 2 :(得分:1)

  

fun() { t t; }

     

这是有效的吗?

不,不是。缺少fun()的返回类型,不推荐使用隐式int返回类型。

但是void fun(){ t t ;}在语法上是有效的。

答案 3 :(得分:0)

是的,因为每件事物都存在于编译器理解的不同位置。

t t;

编译器在遇到第一个t时期望一个类型,并且它有一个名为t的类型。

编辑:发表评论。

我不是在谈论范围。

但是因为我没有编写编译器(只有解释器),所以我不知道这个术语。编译器期望第一个t的标记是一个类型,它也知道到那个点已经声明了什么类型。因为它看到一个引用类型的名称,所以它很开心。然而,如果在那里发现了不是类型的令牌,那么它将正确地发出错误信号。

答案 4 :(得分:0)

解析器首先获取数据类型并维护一个不同的表,然后将其作为变量名称。所以它绝对有效。