免费注册 查看新帖 |

Chinaunix

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

[C] 以其昏昏,使人昭昭? [复制链接]

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
3671 [报告]
发表于 2012-07-30 20:36 |只看该作者
hellioncu 发表于 2012-07-30 16:50
VC用DEF只是一种传统的方法,用__declspec( dllexport )同样可以


__declspec( dllexport ) 会使用原始的 mangle . 导出的函数名不好看。

论坛徽章:
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
3672 [报告]
发表于 2012-07-30 20:56 |只看该作者
蔡万钊 发表于 2012-07-30 20:36
是你BS别人在先的you~~

你自己先去看看#3654、#3655。
另外告诉你,天外有天,GCC不过是C编译器里的一个小弟弟,GCC的标准也不是公认的标准。
所以,不要动不动就拿GCC说事儿,你没见过和想不到的编译器多了去了。
我在帖子里谈的是通用的方法,只会针对一个环境来写程序的还太嫩了!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3673 [报告]
发表于 2012-07-30 21:38 |只看该作者
__BlueGuy__ 发表于 2012-07-29 17:51
ANSI C 一无是处,


@starwing83,看吧,我才刚说对细节依赖最小是很重要的能力。马上就有人可以做反面教材了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3674 [报告]
发表于 2012-07-30 21:57 |只看该作者
蔡万钊 发表于 2012-07-29 09:18
如果是  VC 的话,不在 DEF 文件里写的声明是不会导出名字的,那个村夫连这个常识都不懂。

如果是 GCC , 不需要 DEF 文件,默认是导出的,但是可以加 __attribute__(visibility ("hidden")) 。编译为 .so  后是不会出现在导出表的,但是链接的时候不同的 .o 还是可以相互看到,这就不需要 include c 文件也能实现所要的效果。


static与DEF/dllexport/visibility并不是一回事。它们之间的区别你貌似也明白。

至于这是不是村夫用include .c需要实现的效果、以及他是否连这个常识都不懂我就不知道了。
因为我没看懂他的需求到底是什么 —— 或者说没耐心看完他的全部需求。 如果是我打算include .c,根本就不会有耐心给其他唧唧歪歪的人解释这么多。 自然也就没耐心看其他人关于这点的解释。
但我也怀疑你没看懂他的需求中包含的通用性与代价的含义。

@pmerofc@starwing83@一介村夫

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
3675 [报告]
发表于 2012-07-31 16:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
3676 [报告]
发表于 2012-07-31 17:17 |只看该作者
OwnWaterloo 发表于 2012-07-30 21:57
static与DEF/dllexport/visibility并不是一回事。它们之间的区别你貌似也明白。

至于这是不是村夫用 ...


我当然知道啥意思啦~~ 有时候这确实是比较难取舍的东西。 但是 include .c 绝对是傻逼行为。哪怕换个扩展名呢!

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
3677 [报告]
发表于 2012-07-31 17:19 |只看该作者
一介村夫 发表于 2012-07-30 20:56
你自己先去看看#3654、#3655。
另外告诉你,天外有天,GCC不过是C编译器里的一个小弟弟,GCC的标准也不是 ...


从你对 GCC 的态度就暴露了你的无知。

我只是针对流行的 GCC 和 VC 提出了一个可行的办法,如果别的编译器有别的办法,应该也可以用。
不到万不得已不采用 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
3678 [报告]
发表于 2012-07-31 19:32 |只看该作者
本帖最后由 一介村夫 于 2012-07-31 19:37 编辑
蔡万钊 发表于 2012-07-31 17:19
从你对 GCC 的态度就暴露了你的无知。

我只是针对流行的 GCC 和 VC 提出了一个可行的办法,如果别的 ...

我无知?
我1990年开始玩C的时候,你还在你爸裤裆里呢吧?
在这儿混,你算老几啊?不装B你会死啊?
老夫从头到尾说的都是可移植性,知道什么叫可移植性吗?
90后吧?看帖不会仔细点?要放屁不会先憋着点?
丢人现眼的东西!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3679 [报告]
发表于 2012-07-31 23:40 |只看该作者
回复 3675# pmerofc

ISO C对include的规定就是将文件内容就地展开。而文件的后缀,除了那些standard header是已经用了.h之外,没有规定应该/必须用什么。

而ISO C又规定了什么?规定了什么叫定义与声明,规定了linkage,规定了one definition rules。
相比.h/.c或者.xxoo,这些才是更重要的。后者才是C语言本身、前者只是在后者基础上产生的另一个通俗的约定而已。

只要理由足够充分,又满足了C语言的定义 —— 我相信村夫不会是连multiple definition都解决不了的水平,或者说他都敢再三提inlcude .c,应该连这种错误都不会犯。
那么打破个人为约定又有什么值得大惊小怪的?

就像"禁用goto"、"switch须接break,哪怕是最后一个标号,否则一定要跟一条注释"、"不要用if (p),if (p!=0),if (p!=NULL), if (0!=p)而要用。。。"
就这么见不得其他人打破自己坚持的那点教条? 就不能多包容一点? 争论的都是些什么鸡毛蒜皮的事啊?
他人在他的情形、价值观下写了点与你们价值观不同的代码,又关你们什么事啊?

最好与最正确的教条或最佳实现是: use your brain, always。



前面说打破.h/.c有个前提一直没说,就是有充分的理由。
static是ISO C提供的标准的控制访问性的方式。inlcude也是ISO C提供的将其他文件内容插入到当前位置的标准机制。 —— 每个编译器都会提供。
既然它们能解决问题,为什么必须要去用编译器提供的扩展? 而且这些扩展的控制能力还不如static(linking target之间与translation unit之间)。

@蔡万钊不能理解这样的价值观(村夫所说的代价)我不奇怪。我奇怪的是为什么你也不能理解?

在其他各种问题上,你几乎都是坚守ISO C(这不用我举例了吧?),为什么只在这个问题上宁可用编译器扩展?
于是我就不明白了,你意图宣扬的到底是ISO C?还是你所理解的C?只是恰好大部分情况下两者相同,所以ISO C被当枪使了



>> 这个话题不断有新观点出现,我觉得是好事。争论是好事
我倒是觉得这事坏得不能再坏了。
是否不能inlcude .c,与是否不能goto,是否不能省略break、省略if里的!=0、省略{}等等都是一类问题 —— 闲得蛋疼。
你有你的风格、他有他的习惯,各种情形状况不同,为什么非得认为自己对这种无关正确性的选择是所有人都必须遵守的?
我倒是希望能不要出现这种无关痛痒的讨论,但我希望没用,肯定会层出不穷的。

>> sw后来做了一个较为全面地总结
inlcude .cpp大概08年时用过,goto肯定从08年之前开始就没用过了。
而我几小时之前还在看这货的代码,include .c与goto都有,你问他,我对此开腔了么?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
3680 [报告]
发表于 2012-08-01 08:52 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP