新手求教
本帖最后由 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里面的内容重复部分去掉么?这里面是怎么样的一种情况? 执行的时候不会出错,链接的时候出错的吧!
使用 gcc main.c 的时候不会出错,使用 gcc main.c linklist.c 的时候才会出错。 cpp的#include只是简单的文件替换和宏展开,不存在”自动去掉重复部分“的黑魔法。(除非通过#ifdef避免了重复包含)。
不过楼主没有提到在main.c里面包含list.h,那貌似不应该有问题。
估计是包含了吧,要不然哪来的重复定义呢? main.c里面包含了linklist.c
这是万恶之源 我用了#ifdef避免了重复包含,main.c里面没有包含linklist.h只包含了linklist.c,执行的时候出现重复定义,我就是想问为什么用了避免重复包含还是发生重复定义?怎么解释?回复 3# nswcfd
执行的时候?方便的话贴一些错误输出吧? 要include头文件
页:
[1]