大家好 我只是想知道我们是否可以将变量名称声明为结构名称。
例如
typedef struct
{
char c;
}t;
然后在某些功能中可以使用
fun()
{
t t;
}
这是有效的吗?如果是,那么编译器如何区分它们?
答案 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)
解析器首先获取数据类型并维护一个不同的表,然后将其作为变量名称。所以它绝对有效。