C中不是不允许重复定义吗,但是可以重复声明是吧,这个程序中应该是重复定义吧

但是编译过了,什么原因呢,这是只定义没赋初值的情况下,如果给第一个赋初值,第二个不赋初值也是可以编译过的,

这个程序是哪个程序,你的程序呢?

不允许重复定义,赋值和定义是两回事儿

a应该是定义吧,除了2个a都给赋值外,其他都是可以通过编译的图片

printf里面灰色的字实在是看不见

int a;
int a;
这么写是不行的。

int a;
extern int a;
int main()
{
a = 1;
return 0;
}
这是可以的。