为什么局部变量在C中有全局变量时没有默认类型?

时间:2015-01-07 22:40:54

标签: c

据我所知,C中的全局变量默认使用int类型。我只是想知道为什么本地(自动)变量没有默认类型以及下面的代码导致编译错误

的理性
int main(int argc, char *argv[])
{
    x;
    return x;
}

虽然这不是?

x;
int main(int argc, char *argv[])
{

    return x;
}

2 个答案:

答案 0 :(得分:4)

自c99以来,不再允许隐式int的规则。

然而,对于局部变量(您的第一个示例),即使这不允许作为声明:

x;  /* or even x = 42; */

因为它含糊不清。这是一个表达式语句,用于评估xx的声明吗?在文件范围内,不允许使用语句,因此不存在歧义,它只能是int的声明。

答案 1 :(得分:3)

全局命名空间中的对象名称只能表示对象声明/定义。在本地名称空间中x;也可能意味着“对已经初始化的对象x完全不做任何事情”。