免费注册 查看新帖 |

Chinaunix

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

如何处理头文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-04 07:45 |只看该作者 |倒序浏览
大家都是怎么处理头文件的,如果我有一个头文件a.h里面有一些函数的定义,然后在头文件b.h中,我把a.h包含进来了,然后我的b.cpp文件又包含了b.h和a.h,编译的时候就会出现多次定义的错误,这种情况如何用ifdef条件编译来避免,新手一个,望指教。

论坛徽章:
0
2 [报告]
发表于 2005-06-04 09:09 |只看该作者

如何处理头文件

在每一个头文件里面都定义一个唯一的红就可以了,主要就是为了唯一。只要你的宏是唯一的,其他的你就不要管了,除非是你的a 中有b,b 中也有a,那样的话,就要用别的办法了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-06-04 10:07 |只看该作者

如何处理头文件

为什么要这样定义呢? 给自己找麻烦??~

论坛徽章:
0
4 [报告]
发表于 2005-06-04 10:10 |只看该作者

如何处理头文件

定义不要写在头文件中,写在.c文件中,然后在对应的头文件中写好函数声明。其它要使用这个定义的文件只要包含这个头文件即可。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-06-04 10:11 |只看该作者

如何处理头文件

[quote]原帖由 "kj501"]定义不要写在头文件中,写在.c文件中,然后在对应的头文件中声明为extern。其它要使用这个定义的文件只要包含这个头文件即可。[/quote 发表:


这应该是最好的办法.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-06-04 10:25 |只看该作者

如何处理头文件

[quote]原帖由 "kj501"]定义不要写在头文件中,写在.c文件中,然后在对应的头文件中声明为extern。其它要使用这个定义的文件只要包含这个头文件即可。[/quote 发表:
为什么要在对应的头文件中声明为extern?默认不就是extern吗?

论坛徽章:
0
7 [报告]
发表于 2005-06-04 10:35 |只看该作者

如何处理头文件

如果不声明为extern,又没有赋初值,那就会成为一个暂时定义。如在头文件中这样写就有不同的效果:
extern int a; //声明
int a; //暂时定义
int a = 0; //定义
这个暂时定义在链接时是弱符号,如果有多个弱符号而没有强符号,则链接器会随意选择一个弱符号分配内存。这个有可能会产生意想不到的结果。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-06-04 10:42 |只看该作者

如何处理头文件

原帖由 "kj501" 发表:
如果不声明为extern,又没有赋初值,那就会成为一个暂时定义。如在头文件中这样写就有不同的效果:
extern int a; //声明
int a; //暂时定义
int a = 0; //定义
这个暂时定义在链接时是弱符号,如果有多个弱符号..........
我看楼主好像是在讲函数亚,不是变量.误解了你.

PS:居然有暂时定义这个概念?没听过..没赋初值不是仅意味着不给它一个确定的值,而让它的值就是变量所占内存里的值么?

论坛徽章:
0
9 [报告]
发表于 2005-06-04 12:59 |只看该作者

如何处理头文件

主要是有几个struct定义在头文件中,然后这个头文件如果包含多了,就会出现多次定义的情况.

论坛徽章:
0
10 [报告]
发表于 2005-06-04 15:39 |只看该作者

如何处理头文件

每个头文件都加上:
#ifndef  _DEF_H_
#define _DEF_H_
   extern ...
   extern ...
#endif
然后记住头文件中不要有实际分配内存的语句就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP