【已解决】请教 C 重复定义的问题
Tofloor
poster avatar
zwq133
deepin
2018-10-08 20:00
Author
本帖最后由 zwq133 于 2018-10-8 15:31 编辑

定义了两个函数,和其他函数声明一起放在一个头文件里,然后有三个.c文件都要多次引用这两个定义的函数。

现在问题来了:编译的时候这两个函数就重复定义了。
尝试把他们单独放在一个头文件,也是同样的问题。求解如何避免这种问题!!

网上看了半天没看个所以然~~


刚刚在看蚁人2,初代黄蜂女才回家就Over了。好可惜啊!
感谢各位!!!把函数定义单独放一个源文件就可以了,又多一个文件,好郁闷~~~~

Reply Favorite View the author
All Replies
avatar
zwq133
deepin
2018-10-08 20:01
#1
主页推荐专用楼
Reply View the author
avatar
许自强
deepin
2018-10-08 20:09
#2
你可以贴一下代码,或者上传到git
Reply View the author
avatar
zwq133
deepin
2018-10-08 20:13
#3
https://bbs.deepin.org/post/169609
你可以贴一下代码,或者上传到git

准备解决这个问题过后再上传的,哈哈!
我还是把代码贴出来把!
Reply View the author
avatar
许自强
deepin
2018-10-08 20:25
#4
https://bbs.deepin.org/post/169609
准备解决这个问题过后再上传的,哈哈!
我还是把代码贴出来把!

感觉你这个还有点复杂,看不懂
Reply View the author
avatar
151******18
deepin
2018-10-08 21:13
#5
本帖最后由 sunowsir 于 2018-10-8 13:15 编辑

可以这样:
#ifndef _/*文件名*/_H
#define _/*文件名*/_H
/*内容*/
#endif

例如:
  1. #ifndef _HEAD_H
  2. #define _HEAD_H
  3.     int test(int, int);
  4.     int test1(int);
  5. #endif
Copy the Code

Reply View the author
avatar
许自强
deepin
2018-10-08 21:17
#6
https://bbs.deepin.org/post/169609
感觉你这个还有点复杂,看不懂

你把Enter_和pause的实现从头文件拿出来应该就可以啦
Reply View the author
avatar
151******18
deepin
2018-10-08 21:17
#7
ma6174大神的vim配置会自动生成这个,防止重复引入。
Reply View the author
avatar
151******18
deepin
2018-10-08 21:18
#8
函数的实现肯定不能放在头文件里
Reply View the author
avatar
xiaoxiaoming
deepin
2018-10-08 21:23
#9
把函数声明放在.h文件里,函数实现写在与头文件同名的.c文件里,在其他.c文件引用到函数时就在这个.c文件的前面include那个.h文件就行了
Reply View the author
avatar
rekols
deepin
2018-10-08 21:27
#10
extern  了解一下
Reply View the author
avatar
158******08
deepin
2018-10-08 21:45
#11

头文件就是简单的引入一个声明之后正常的对每个源文件进行编译 在链接阶段在会把不同源文件生成的目标文件链接到一起。
首先你这个extern的用法就错了,extern在语法上是修饰函数声明的一个关键字,而且加不加都一样,而你用在了定义函数上,而include预处理就是简单的把后面的文件内容复制到include指令这里,所以你的Enter_()和pause_函数就会被多定义,链接的时候就会报错,你把这两个函数的定义写道另外的源文件里,只把定义放在头文件里就好了
Reply View the author
avatar
duanyao
deepin
2018-10-09 00:18
#12
如果把函数实现放在头文件里,应该用 inline 或 static 来修饰,这样就不会有重复定义的问题,但是这会造成可执行文件中重复的机器码,所以只适用于短小的函数。
楼主的问题嘛,最好还是系统地学习一下C语言,避免知其然不知其所以然。
Reply View the author
avatar
zwq133
deepin
2018-10-09 00:37
#13
https://bbs.deepin.org/post/169609
如果把函数实现放在头文件里,应该用 inline 或 static 来修饰,这样就不会有重复定义的问题,但是这会造成 ...

恩,正在学习,也正在继续努力与放弃之间徘徊!

学到数组就感觉有点难度了
Reply View the author
avatar
duanyao
deepin
2018-10-09 01:06
#14
https://bbs.deepin.org/post/169609
恩,正在学习,也正在继续努力与放弃之间徘徊!

学到数组就感觉有点难度了 ...

看看这个有用没:
https://zhuanlan.zhihu.com/c2game

如果还在学语法的阶段,可以先不考虑多个头文件源文件的做法,一个源文件就行了,反正代码量不会很大。
Reply View the author
avatar
zwq133
deepin
2018-10-09 01:25
#15
https://bbs.deepin.org/post/169609
看看这个有用没:
https://zhuanlan.zhihu.com/c2game

寓教于乐,这教程应该不错啊!
Reply View the author