今天同学问了我一个在程序中包含.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) |