在C中声明两个同名的全局变量

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++中并非如此.我认为在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++中使用,我建议避免使用它.