嗨全部 我只是想知道我们是否可以声明变量名称作为结构名称。结构类型和变量名称
例如
typedef struct
{
char c;
}t;
然后在一些功能我可以用
fun()
{
t t;
}
是这有效吗?如果是这样,那么编译器如何区分它们?
嗨全部 我只是想知道我们是否可以声明变量名称作为结构名称。结构类型和变量名称
例如
typedef struct
{
char c;
}t;
然后在一些功能我可以用
fun()
{
t t;
}
是这有效吗?如果是这样,那么编译器如何区分它们?
是的,它是有效的。如果这样做,那么结构类型将隐藏在封闭范围内,并且t
仅引用声明的变量。
是的,因为每个事物在编译器的理解中都处于不同的位置。
t t;
编译器在遇到第一个t时期待一个类型,并且它有一个类型叫做t。
编辑:为了解决评论。
我不是在谈论范围。
但是由于我没有编写一个编译器(只有解释器),我不知道这个术语。编译器期望第一个t的一个标记是一个类型,它也知道到那时为止已经声明了什么类型。因为它看到一个名称,指的是一种类型,它很高兴。而如果在那里找到一个不是类型的令牌,那么它会正确地发出错误信号。
-1,因为你的理由是错误的。 'typedef'和变量名在相同的范围内。 – 2010-11-11 08:43:43
术语是它们是不同类型的标记。 – Praxeolitic 2014-09-04 04:12:02
fun() { t t; }
是这有效吗?
不,它不是。返回类型fun()
缺失且隐含int
返回类型已弃用。
但是void fun(){ t t ;}
在语法上是有效的。
是的,但你为什么要?如果你想在你的项目中发现错误和错误,那么就直接提出并在类型之后命名变量。
布拉沃,只是因为某些东西是有效的,这并不是一个好主意。 – paxdiablo 2010-11-11 04:54:04
解析器首先获取数据类型,并维护一个不同的表和后面的部分作为变量名。所以它绝对有效。
您可以随时编译它......我认为编译器将能够区分,因为您可以知道变量/对象何时被声明与读取/写入/等等。 – 2010-11-11 04:30:15
@muntoo,你可以编译它,但是它不会告诉你它是否有效,只是它是否在你的编译器中起作用。 – 2010-11-11 04:33:41
当然,如果精神病患者是看着你的代码的下一个人... ... – 2010-11-11 04:41:56