king_linux001 发表于 2016-07-26 22:13

新手求教

本帖最后由 king_linux001 于 2016-07-26 23:06 编辑

在linklist.h文件里声明了函数,linklist.c文件实现linklist.h里面声明的函数,linklist.c包含了linklist.h。后在main.c里面包含了linklist.c。在编译的时候没错,执行的时候出现重复定义函数的错误,这是为什么?
main.c包含了linklist.c在链接的时候不会把linklist.h里面的内容重复部分去掉么?这里面是怎么样的一种情况?

net小伙 发表于 2016-07-27 09:50

执行的时候不会出错,链接的时候出错的吧!
使用 gcc main.c 的时候不会出错,使用 gcc main.c linklist.c 的时候才会出错。

nswcfd 发表于 2016-07-27 11:19

cpp的#include只是简单的文件替换和宏展开,不存在”自动去掉重复部分“的黑魔法。(除非通过#ifdef避免了重复包含)。

不过楼主没有提到在main.c里面包含list.h,那貌似不应该有问题。
估计是包含了吧,要不然哪来的重复定义呢?

cjaizss 发表于 2016-07-27 12:02

main.c里面包含了linklist.c
这是万恶之源

king_linux001 发表于 2016-07-27 19:46

我用了#ifdef避免了重复包含,main.c里面没有包含linklist.h只包含了linklist.c,执行的时候出现重复定义,我就是想问为什么用了避免重复包含还是发生重复定义?怎么解释?回复 3# nswcfd


   

nswcfd 发表于 2016-07-28 18:25

执行的时候?方便的话贴一些错误输出吧?

cjfeii 发表于 2016-07-29 14:08

要include头文件
页: [1]
查看完整版本: 新手求教