免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
61 [报告]
发表于 2009-10-27 16:51 |只看该作者
以后应该include xxx.include

论坛徽章:
0
62 [报告]
发表于 2009-10-27 17:27 |只看该作者
还好我大学的C入门教材是用的 电子工业出版社的 ,现在还时不时翻几下

论坛徽章:
0
63 [报告]
发表于 2009-10-27 19:27 |只看该作者
文件内私有函数导致冲突为什么不在函数前加static关键字呢?要拆成多个.c来include?

论坛徽章:
0
64 [报告]
发表于 2009-10-27 19:51 |只看该作者
之前见过某开源软件一个h文件里面实现了所有函数的实现,对应的c文件却是空的。编程并非条条框框一个c对应一个h,h里声明,c里实现。

论坛徽章:
0
65 [报告]
发表于 2009-10-27 20:21 |只看该作者
原帖由 一介村夫 于 2009-10-27 15:02 发表
你做一个商业函数库供别人使用,如果里面包含可见非公开函数,你怎么能保证你的用户在连接你的库和其它另一具有同样特征的函数库的时候绝对不会发生冲突?


你这完全是无视了 static 关键字。如果你在认为可能发生命名冲突的内部函数声明前面加个 static,那就根本不会发生冲突,所有声明为 static 的全局符号都只在本模块中可见。



[ 本帖最后由 langue 于 2009-10-27 20:25 编辑 ]

论坛徽章:
0
66 [报告]
发表于 2009-10-27 20:27 |只看该作者
原帖由 bandaotidejia 于 2009-10-27 19:51 发表
之前见过某开源软件一个h文件里面实现了所有函数的实现,对应的c文件却是空的。编程并非条条框框一个c对应一个h,h里声明,c里实现。

对啊,这个有理。Linus早期的代码好像就有这个习惯,在h文件中定义,而不是仅仅声明。能用就好。

论坛徽章:
0
67 [报告]
发表于 2009-10-27 20:43 |只看该作者
一介村夫:
问题有对应的方法,但是不属于标准C, glibc中动态库就是这么做的, ELF sym有属性叫hidden, 可以在so内是全局的. 对so外的引用是不可见的. 里面甚至对同一个符号有不同的名字,以便于在生成PIC代码时更高效,
在书上教人include .c 那是太有问题了, 特别是初学者, 这种坏影响可能很大

论坛徽章:
0
68 [报告]
发表于 2009-10-27 22:27 |只看该作者
static就不能重入了
另外,线程安全咋办?

论坛徽章:
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
69 [报告]
发表于 2009-10-27 22:38 |只看该作者
原帖由 langue 于 2009-10-27 20:21 发表


你这完全是无视了 static 关键字。如果你在认为可能发生命名冲突的内部函数声明前面加个 static,那就根本不会发生冲突,所有声明为 static 的全局符号都只在本模块中可见。


你怎么知道我没加呢?
加上static就能把10000行的程序变成100行么?
实际上,正式因为加了static关键字,才无法分割成独立的小文件进行编译连接,而只能使用include。

论坛徽章:
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
70 [报告]
发表于 2009-10-27 22:42 |只看该作者
原帖由 flw2 于 2009-10-27 20:43 发表
一介村夫:
问题有对应的方法,但是不属于标准C, glibc中动态库就是这么做的, ELF sym有属性叫hidden, 可以在so内是全局的. 对so外的引用是不可见的. 里面甚至对同一个符号有不同的名字,以便于在生成PIC代码时更 ...

面向特定编译器和平台进行编程不是好习惯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP