为何在两个文件中分别定义了两个相同的变量,却没有冲突,而有时候却有重复定义的冲突呢

为什么在两个文件中分别定义了两个相同的变量,却没有冲突,而有时候却有重复定义的冲突呢?
本帖最后由 leigema 于 2013-10-06 17:18:36 编辑
我在1.c和2.c中都定义了 int  a。为什么编译的时候没有出现重定义的错误呢?

int a;
int main()
{
         return 0;
 }

int a = 2;


gcc -std=c99 -Wall 1.c 2.c 完全没问题啊。



而且我分开生成目标文件后在链接也没问题
gcc -std=c99 -Wall -c 1.c
gcc -std=c99 -Wall -c 2.c
gcc -std=c99 -Wall 1.o 2.o
也完全没问题啊

这不是重复定义吗?

我以前遇到的符号重复定义错误是怎么回事?
重复定义

------解决方案--------------------
没有赋初值的被当成变量声明处理了。
------解决方案--------------------
编译的时候不做链接的事情,不知道有两个定义
------解决方案--------------------
因为你用了C语言的一个垃圾特性。多用C++编译器来编译C代码吧。
------解决方案--------------------
编译时各文件单独编译,跟其他文件无关,除非你用include把另一个文件的内容复制了过来
C语言规定变量定义时未赋值则为弱定义,如果和其它定义冲突可以视为声明