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

雷格 2013-10-06 05:17:53
我在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
也完全没问题啊

这不是重复定义吗?

我以前遇到的符号重复定义错误是怎么回事?
...全文
281 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baichi4141 2013-10-06
  • 打赏
  • 举报
回复
编译时各文件单独编译,跟其他文件无关,除非你用include把另一个文件的内容复制了过来 C语言规定变量定义时未赋值则为弱定义,如果和其它定义冲突可以视为声明
taodm 2013-10-06
  • 打赏
  • 举报
回复
因为你用了C语言的一个垃圾特性。多用C++编译器来编译C代码吧。
昵称很不好取 2013-10-06
  • 打赏
  • 举报
回复
编译的时候不做链接的事情,不知道有两个定义
zhaokai115 2013-10-06
  • 打赏
  • 举报
回复
没有赋初值的被当成变量声明处理了。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧