免费注册 查看新帖 |

Chinaunix

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

关于头文件包含的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-13 00:17 |只看该作者 |倒序浏览
本帖最后由 比克流 于 2010-02-13 00:19 编辑

最近学网络编程,看到一本书上有一种做法:把有关网络的头文件<sys/socket.h> <netinet/in.h> <netdb.h>等一大堆,还有 stdio.h , stdlib.h 等都放到一个
公共的头文件unixnet.h里,然后其他所有的文件都include这个unixnet.h 。

但有的文件可能只用到一个stdio.h ,这样做显然编译速度会变慢,但确实方便,
请问这个习惯好不好?
有没有即不做无用功,又方便的办法?
谢谢

论坛徽章:
0
2 [报告]
发表于 2010-02-13 00:35 |只看该作者
慢多少?比STL还慢?

论坛徽章:
0
3 [报告]
发表于 2010-02-13 00:36 |只看该作者
回复 2# prolj


   您的意思这样作没问题?
谢谢

论坛徽章:
0
4 [报告]
发表于 2010-02-13 10:53 |只看该作者
最近学网络编程,看到一本书上有一种做法:把有关网络的头文件  等一大堆,还有 stdio.h , stdlib.h 等都放 ...
比克流 发表于 2010-02-13 00:17


貌似一般提倡只包含需要的头文件,尽量避免间接包含。并且,能用向前声明forward declaration就不包含头文件。尽量少。包含多了增加目标文件生成的大小。

论坛徽章:
0
5 [报告]
发表于 2010-02-13 11:57 |只看该作者
按需供给

论坛徽章:
0
6 [报告]
发表于 2010-02-13 18:18 |只看该作者
看需求吧。我估计书中这种做法是为了减少代码的行数,否则看代码觉得很冗长。

论坛徽章:
0
7 [报告]
发表于 2010-02-13 18:29 |只看该作者
我们一般在c文件里面包含需要的头文件。
有一些必要的头文件放在一个头文件里面include,省区很多包含的操作

论坛徽章:
0
8 [报告]
发表于 2010-02-14 00:48 |只看该作者
我来普及一下基本知识,帮各位把基础打的牢固一点。
1,包含过多的头文件,无论是C还是C++都不会增加代码体积的,以为你没有用到的代码不会编译进去,就算你头文件里面有函数,包含进来了,c或者cpp里没用到,照样会被编译器忽略掉。
2,包含过多的头文件,编译速度上,带来的代价就是预处理!可以粗略的认为是read文件,write临时文件,这就是仅有的代价!没有别的!
2.5,强调一下为什么C++包含过多的头文件不是一个好习惯,写过C++代码的人都知道,抱歉的是我没怎么写过C++代码,仅仅是简单修改别人的。修改头文件,确切的说仅仅是头文件里面的class定义,make的时候就会造成N多cpp文件的重新编译,大大增加了重新编译的时间。但是,这个和包含多余的头文件不那么直白的关系,而直接的是make的依赖问题。
2.9,C++的STL是造成编译速度慢的主要原因,MD,我放弃C++了。

论坛徽章:
0
9 [报告]
发表于 2010-02-14 01:40 |只看该作者
本帖最后由 xyfree 于 2010-02-14 01:43 编辑
....

2.5,强调一下为什么C++包含过多的头文件不是一个好习惯,写过C++代码的人都知道,抱歉的是我没怎么写过C++代码,仅仅是简单修改别人的。修改头文件,确切的说仅仅是头文件里面的class定义,make的时候就会造成N多cpp文件的重新编译,大大增加了重新编译的时间。但是,这个和包含多余的头文件不那么直白的关系,而直接的是make的依赖问题。

...
prolj 发表于 2010-02-14 00:48


似乎这个问题(N多cpp文件的重新编译)可以用句柄类来解决
  1. SomeClassHandle {
  2.     private:
  3.     SomeClass* handle;

  4.     public:
  5.     SomeClassHandle():handle(0) {
  6.         handle = new SomeClass;
  7.     }

  8.     ~SomeClassHandle() {
  9.         delete handle;
  10.     }

  11.     // 重载 operator. 和 operator-> 省略若干字...
  12. }
复制代码
当SomeClass的设计有变化时,使用到SomeClass的其他代码不必重新编译
当然对性能敏感的地方最好不要这么做....

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
10 [报告]
发表于 2010-02-14 08:27 |只看该作者
按需供给?

那还不累死啊,而且稍微动点代码就得考虑是不是修给头文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP