据我所知,C中的全局变量默认使用int类型。我只是想知道为什么本地(自动)变量没有默认类型以及下面的代码导致编译错误
的理性int main(int argc, char *argv[])
{
x;
return x;
}
虽然这不是?
x;
int main(int argc, char *argv[])
{
return x;
}
答案 0 :(得分:4)
自c99以来,不再允许隐式int
的规则。
然而,对于局部变量(您的第一个示例),即使这不允许作为声明:
x; /* or even x = 42; */
因为它含糊不清。这是一个表达式语句,用于评估x
或x
的声明吗?在文件范围内,不允许使用语句,因此不存在歧义,它只能是int
的声明。
答案 1 :(得分:3)
全局命名空间中的对象名称只能表示对象声明/定义。在本地名称空间中x;
也可能意味着“对已经初始化的对象x
完全不做任何事情”。