Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35236
  • 博文数量: 7
  • 博客积分: 695
  • 博客等级: 上士
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-25 09:55
文章分类

全部博文(7)

文章存档

2011年(1)

2008年(6)

我的朋友

分类: C/C++

2008-10-12 16:57:51

     今天同学问了我一个在程序中包含.c文件的问题,在连接时总是出现下面的错误:
XX函数 already defined in XXX.obj
fatal error LNK1169: one or more multiply defined symbols found
     从报错信息很容易看出来是重新定义了某个函数,可在整个程序中也没看到在哪里重定义了函数,弄了很久才搞定。原因是这样的:在编译开始前,#include预处理命令会把要包含的.c文件的内容直接拷贝到#include所在的位置。当我们的编译器编译程序时,它会把当前工程里的所有.c文件都编译成.obj文件,因为我们包含了.c文件的原因,这时在.c文件中定义的函数的目标代码就会有两份拷贝,因此,就出现了一个C程序中有两个相同的函数的现象,这是C不允许,所以就出错了。(鄙视一下自己!这么简单的问题还弄了这么久:()
     这样看来,只要我们在要包含的.C文件中含有函数的定义,就一定会出错,那么#include预处理命令是不是就没必要支持包含.C文件了呢?因为好像我们完全可以用#include .h的方式替代它。
阅读(738) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~