免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3207 | 回复: 19
打印 上一主题 下一主题

小花请教一个头文件问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-15 11:08 |只看该作者 |倒序浏览
本帖最后由 花儿笑 于 2012-02-15 17:09 编辑

     大大们,我现在仿照书上写了一个头文件name_st.h和相应的names_st.h源文件,现在要在一个叫useheader.c的程序里使用name里的函数,书上说除了前面要include"name_st.h"以外,还需要编译连接name_st.c 和useheader.c,这是什么意思啊?有什么办法可以让我自己做的头文件像stdio.h这种一样直接用就可以呢?

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
2 [报告]
发表于 2012-02-15 11:16 |只看该作者
lz是mm吗?

复制+粘贴啊。
或者写的通用一点编译成一个库。
或者直接把源代码文件加入当前工程,一块编译。

如果相关操作都放到一个.h中,被多次引用链接时会引起符号重复错误(如果没有用static修饰的话,即使用了static,代码其实还是重复的,没有链接错误罢了)

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2012-02-15 11:20 |只看该作者
linux内核里面有这个头文件rbtree.h list.h直接拿出来稍加修改就可以使用

论坛徽章:
0
4 [报告]
发表于 2012-02-15 11:29 |只看该作者
回复 2# nketc


    嗯啊,LZ是个笨mm...哭

   之前看了一段书,开始编程才发现n多地方不扎实...感觉知识都是零碎的,不知道怎么拼起来呢

   小花觉得大大说的方法1和3还比较适用....第二个库什么的就不太懂了

   还有,大大说的引用链接造成错误那个是什么情况..泪求解释帝

论坛徽章:
0
5 [报告]
发表于 2012-02-15 11:30 |只看该作者
回复 3# xinglp


    大大我用的是Dev-cpp

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
6 [报告]
发表于 2012-02-15 12:46 |只看该作者
回复 4# 花儿笑


    源代码中出现的名字(函数名,变量名(不包括宏名)等语言语法标示符)在编译器编译源代码的时候会把他们放入符号表。

如果你把栈的实现写在了头文件中,而函数名(example: stack_push)又没有static修饰,那么当 a.c 和 b.c 都引用这个头文件时,a.c 和 b.c 都分别可以编译通过,但是当最终链接生成可执行文件时就会出现符号重定义错误。因为 stack_push 的实现同时出现在了 a.c 和 b.c中,连接器要把对符号的引用转换为符号的地址,这时候连接器就傻眼了:有两个 stack_push,我用哪一个呢?无法决策的结果只能是报错,让程序员解决了。

   所谓的编译成库,你可以形象的理解为把一些源代码编译成目标文件,然后把这些目标文件组织起来形成一个“仓库”,当你要使用库里的代码直接用就好了,链接的时候把这个库附加给链接器,链接器会从里面找。

论坛徽章:
0
7 [报告]
发表于 2012-02-15 12:50 |只看该作者
到网上去找数据结构相关的库啊。教材里面的基本的东西肯定别人都已经实现过了
C++有STL,C的有libcstl

论坛徽章:
0
8 [报告]
发表于 2012-02-15 12:50 |只看该作者
你可以做一个自己的可以通用的数据结构模块,这样在其他用到相似或者一样的数据结构的地方就可以调用了

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
9 [报告]
发表于 2012-02-15 16:32 |只看该作者
初学者多写几次是好事

论坛徽章:
0
10 [报告]
发表于 2012-02-15 16:57 |只看该作者
回复 6# nketc


    这位大大讲的很详细,多谢了,那个反复引用造成错误的问题我明白了,就是说大家都想改变头文件里的函数这样会造成矛盾对吧

   关于把源代码编译成库,然后加链接什么的那个具体怎么弄啊?书上库这一块没有讲的很具体呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP