为何在两个文件中分别定义了两个相同的变量,却没有冲突,而有时候却有重复定义的冲突呢
为什么在两个文件中分别定义了两个相同的变量,却没有冲突,而有时候却有重复定义的冲突呢?
我在1.c和2.c中都定义了 int a。为什么编译的时候没有出现重定义的错误呢?
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语言规定变量定义时未赋值则为弱定义,如果和其它定义冲突可以视为声明
我在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语言规定变量定义时未赋值则为弱定义,如果和其它定义冲突可以视为声明