免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: whelysee
打印 上一主题 下一主题

[C] 谭浩强的书我就不说什么了,居然教学生include一个.c文件 [复制链接]

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
11 [报告]
发表于 2009-10-27 01:05 |只看该作者
原帖由 langue 于 2009-10-27 00:58 发表
#include  本来就是多余。既然可以拆成小文件,链接器可以解析所有的符号,那又为何要拿来放在一个编译单元里?拆散了编译不是一样的嘛。

A.c要调用B.c里面的函数,在拆散的情况下,就必须把B.c中的函数暴露出来。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
12 [报告]
发表于 2009-10-27 01:07 |只看该作者
原帖由 langue 于 2009-10-27 01:04 发表


好维护就怪了,你修改其中的一个文件,整个 parent file 都要重新编译,拆散了编译就不会。

拆散就要声明原型,而有些函数只是在功能内部多次调用,根本没必要暴露给整个程序。

论坛徽章:
0
13 [报告]
发表于 2009-10-27 01:16 |只看该作者

回复 #12 一介村夫 的帖子

这只能说明你的模块之间耦合度太高,是时候适度降低耦合了。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
14 [报告]
发表于 2009-10-27 01:18 |只看该作者
原帖由 langue 于 2009-10-27 01:16 发表
这只能说明你的模块之间耦合度太高,是时候适度降低耦合了。

我恰恰是模块之间没有耦合才需要对其它模块屏蔽本模块的函数。

论坛徽章:
0
15 [报告]
发表于 2009-10-27 01:21 |只看该作者
原帖由 一介村夫 于 2009-10-27 01:18 发表

我恰恰是模块之间没有耦合才需要对其它模块屏蔽本模块的函数。


这恰恰和你先前的说法相悖。

A.c要调用B.c里面的函数,在拆散的情况下,就必须把B.c中的函数暴露出来。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
16 [报告]
发表于 2009-10-27 01:22 |只看该作者
原帖由 langue 于 2009-10-27 01:21 发表


这恰恰和你先前的说法相悖。


这是对你说的,就是因为我觉得在没有耦合的情况下,向整个程序暴露模块内部的函数不好,所以才不采用拆散而是采用include的办法。

论坛徽章:
0
17 [报告]
发表于 2009-10-27 01:26 |只看该作者

回复 #16 一介村夫 的帖子

模块内部函数应该是模块自己的事,与其它模块本来就没关系。static linkage 就可以了。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
18 [报告]
发表于 2009-10-27 01:40 |只看该作者
原帖由 langue 于 2009-10-27 01:26 发表
模块内部函数应该是模块自己的事,与其它模块本来就没关系。static linkage 就可以了。

看来我们说的不是一回事。
考虑这种情形:
一个巨大的程序由几个大模块组成,每个大模块都有几万行代码,模块内部存在复杂的彼此间调用关系,如何使得最后的产品在模块间的相关性最低?
A模块中有一个OpenFile功能,B模块中也有一个,但是两者完全不同,如果把程序拆散,就要分别暴露这两个函数,而为了使A模块与B模块的同名功能不冲突,就势必要对这两个函数的命名复杂化。
同时,考虑到命名的可读性,再考虑到nm的功能,如果采用拆散的方式,最后的产品就跟赤裸裸地站在别人面前一样。
当然,确实存在include方式使得编译不便的问题,但是这是一个取舍问题,当你不想让别人太容易通过反汇编读懂你的程序的时候,适当地多隐藏一些东西还是有好处的。

论坛徽章:
0
19 [报告]
发表于 2009-10-27 08:42 |只看该作者

回复 #7 一介村夫 的帖子

账号被盗了?

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
20 [报告]
发表于 2009-10-27 08:44 |只看该作者
好像最近大家对老谭很关注啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP