ATu*_*ngh 10 c c++ scope global
我在C中声明了两个同名的全局变量.它应该给出错误,因为我们不能在同一个存储类中声明相同的名称变量.
我用C++检查了它 - 它给出了一个编译时错误,但不是在C中.为什么?
以下是代码:
int a;
int a = 25;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请查看:Ideone写的代码
我想这可能就是原因
但在C++中并非如此.我认为在C++中,无论变量是在全局范围还是自动范围声明,声明和定义都是同时发生的.
任何人都可以对它投入更多的光.
现在当我定义变量两次给它两次值时,它给了我错误(而不是一个声明和一个定义).
代码:现在有两个定义
int a;
int a;
int a;
int a = 25;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*son 10
在C中,多个全局变量被"合并"为一个.所以你确实只有一个全局变量,多次声明.这可以追溯到C中extern不需要(或可能不存在 - 不太确定)的时间.
换句话说,由于历史原因,这在C中是有效的,因此我们仍然可以编译在C标准之前编写的代码.
虽然,为了允许代码在C++中使用,我建议避免使用它.