社区
非技术区
帖子详情
今天和朋友讨论一个问题,突然想不明白了
baibaichen
2005-12-22 10:20:28
似乎只有C/C++才有头文件,而其它的语言如C#,JAVA,DELPHI等都没有,有什么这知道这是为什么啊?
...全文
258
22
打赏
收藏
今天和朋友讨论一个问题,突然想不明白了
似乎只有C/C++才有头文件,而其它的语言如C#,JAVA,DELPHI等都没有,有什么这知道这是为什么啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
baibaichen
2005-12-22
打赏
举报
回复
呵呵,这到是,DELPHI可以在DCU中放一些信息!谢谢!
汇编,我就不扯了,搞不懂。我想知道的是,这两种不同的方法,有什么好处和短处,它们的目的?
晨星
2005-12-22
打赏
举报
回复
考虑到c具有低级语言的某些特征,c/c++有头文件,恐怕跟汇编有头文件或多或少是有联系的。
偶表示同意。
megaboy
2005-12-22
打赏
举报
回复
谁说只有c/c++才有头文件啊,汇编也有头文件,汇编的头文件后缀名是inc。甚至,汇编也可以使用c/c++的头文件呢(当然一般来说要对头文件中的某些东西进行转换)!考虑到c具有低级语言的某些特征,c/c++有头文件,恐怕跟汇编有头文件或多或少是有联系的。
短歌如风
2005-12-22
打赏
举报
回复
刚刚试了一下,如果只修改Implementation节的内容,依赖于它的单元确实不需要重新编译。要实现这一功能也并不需要“保存有上一次修改文件的备份”,完全可以利用编译生成的DCU中保存的信息,反正这一文件格式也是Borland说了算的。
socrazylee
2005-12-22
打赏
举报
回复
没有头, 说明其他的语言都是四肢发达头脑简单的人用的
^_^
幸亏这里是c/c++版
baibaichen
2005-12-22
打赏
举报
回复
也就是和C++中的HEADER/CPP的关系差不多了吧?EN,回到我的问题为什么只有C/C++才有头文件,这体现了什么设计思路?
另,关于
"
在Delphi中一个单元有Interface节和Implemetation节,如果你只修改了Implemetation节的内容,不会导致依赖于这个单元的其它单元重新编译,不会出现baibaichen所担心的问题。
"
手头没有DELPHI,一时无法验证,只是感觉不太可能,我修改了源文件,编译器如何知道修改的是Implemetation节的内容,而不是Interface节的内容?难到还保存有上一次修改文件的备份?这似乎不可能啊。
短歌如风
2005-12-22
打赏
举报
回复
在Delphi中一个单元有Interface节和Implemetation节,如果你只修改了Implemetation节的内容,不会导致依赖于这个单元的其它单元重新编译,不会出现baibaichen所担心的问题。
感觉上Delphi中的单元其实是把C++中的CPP和H合并为一个文件进行组织了。
在Delphi,有两个Uses段,分别处于Interface节和Implementation节,如果你在Implementation中use了一个单元A,它只是表明你这个单元的实现依赖于单元A,但依赖于你这个单元的其它单元不会因此产生一个对A的依赖;但如果你在Interface节Use了一个单元,则会导致依赖的传递。在interface节的uses可能会导致循环依赖的情况,这时编译器将拒绝工作,需要修改代码,通常会导致产生新的单元,把被依赖的共同部分放进去。
baibaichen
2005-12-22
打赏
举报
回复
TO BluntBlade(无锋之刃·回炉再造)
为什么?实例?
baibaichen
2005-12-22
打赏
举报
回复
唔,使用头文件是为了ODR(一处定义原则),和运行时没有任何关系..。C#从没看过,不过JAVA的import和#include差不多,但,C++中的头文件只有声明,没有实现。然后JAVA、C#和DELPHI却是又有定义,又有实现。
在C++,如果更改了实现,则不需要编译其它编译单元,但需要重LINK。如果更改了声明,则需要编译包含了该声明的所有编译单元。
我觉得在JAVA,C#,编译成中间代码,我不是太清楚,但至少DELPHI应该是有这样的问题的,即我如只修改了实现,可能还是要编译不需要编译的单元。
Kvci
2005-12-22
打赏
举报
回复
DELPHI里有
有个use *****
BluntBlade
2005-12-22
打赏
举报
回复
头文件是一种很恶心的设计……
晨星
2005-12-22
打赏
举报
回复
Java和C#不一样,他们的目标代码中包含元数据,只要你拥有class(jar),或者.net的dll/exe,那么你就可以知道所有的跟你所用的这些class、dll或exe相关的元数据(比如类型信息),根本不需要任何其它文件。
而C/C++中,如果没有常用的组织在头文件中的声明、定义等,仅仅凭借一个一般的obj、lib或者传统的dll,你能做到么?
晨星
2005-12-22
打赏
举报
回复
>>C++的类型信息也可以算是一些简单的元数据
是的,这句没错,我说的元数据很大一部分也就是指类型相关的信息。
但问题是,使用C/C++编程,大多数情况下除了头文件和拷贝/粘帖,你还有别的常用方式可以获得其它模块里的类型信息吗?
晨星
2005-12-22
打赏
举报
回复
仔细想想,前面说得也不对,包括楼主的问题也不对,C/C++并非“必须使用头文件”。
严格地讲,使用头文件纯粹是为了方便组织代码的需要,这里边包括工程上甚至商业上的需要。否则,就C/C++语言和编译器本身来说,不能说就是“必须”。
没有头文件,完全可以编程,只是程序员的日子会变得非常非常非常痛苦。为什么痛苦?试想没有头文件,你就必须在各个源文件之间把公共的声明、类型定义、宏之类的东西拷贝来粘帖去,一个地方改了,所有的都得重新改,那不是痛苦是什么?
而且如果没有头文件,别人发布一个库同时还得发布一段一段地供你拷贝、粘帖的声明和定义,那对发布者和使用者都是痛苦。
所以,C/C++并非“必须”使用头文件。如果有人天生喜欢自虐,那完全可以不使用头文件,到处拷贝/粘帖就行了。
但如果你想深究是什么造成了如果不使用头文件包含机制就会很痛苦,那么原因应该说是两个:
(1)C/C++是一种静态类型的语言;
(2)通常,C/C++编译器编译出的目标文件本身中没有元数据描述。
当然,为什么C/C++语言被设计成了静态语言,为什么C/C++编译器通常都不在目标文件中插入元数据描述,这个话题就扯远了,必须从C/C++语言设计的初衷、设计的目的开始说了。
baibaichen
2005-12-22
打赏
举报
回复
to steedhorse(晨星)
不是吧?扯到那儿去了?带不带元数据和有没有头文件是两回事,C++的类型信息也可以算是一些简单的元数据啊。
sankt
2005-12-22
打赏
举报
回复
学习
dragonzxh
2005-12-22
打赏
举报
回复
偶依旧坚持C/C++是因为比较帅才搞了头文件滴~~~~至于C#,Java之流,明显是不够帅~~~~。。。
晨星
2005-12-22
打赏
举报
回复
Sorry,打错字了,
“因此必需要额外的头文件”->“因此不需要额外的头文件”
汗一个。-_-
晨星
2005-12-22
打赏
举报
回复
楼主有兴趣可以学学COM,当你明白一个COM组件必须怎样做才能够直接被VB、VBScript,Javascript等脚本语言动态调用时,就基本明白一大半了。
晨星
2005-12-22
打赏
举报
回复
C#和Java编译出的目标单元中都自己带着元数据描述,因此必需要额外的头文件。Dephi不太了解。
加载更多回复(2)
(超长)
讨论
关于允许物料负库存的利与弊...
一直不觉得这是
一个
问题
,当连续两次在诸友谈起这个
问题
而争执不下时,我突然意识到这应该是
一个
大
问题
。于是
想
当然地希望能集思广义,与更多人一起探讨这个
问题
的
想
法。同时也希望在这里与大家的
讨论
结果,会带给己...
《听后感-罗振宇2023“时间的
朋友
”跨年演讲》
今晚我
想
讲的第五个故事,是
一个
孩子不听劝的故事。她叫袁媛,是一位科班出身的建筑设计师,在国内首屈一指的房地产企业万科干了4年的项目管理。但在2019年,袁媛做了
一个
非常任性的决定,从万科辞职,改行去搞婚礼...
移动API设计与安全存储
最近在重新排查API的时候,我们在企业内部突然
讨论
到
一个
问题
。我们的APP接口安全吗?
一个
安全的API接口是该如何设计的?当然,对我看来我们的目前提供给APP使用的API并不安全,自己之前都是在关注逆向与hook也没有...
一个
老程序员的感悟:做技术二十多年,突然
明白
的道理
前几天在办公楼上认识了
一个
朋友
,他在某知名IT 招聘网站做专业职业顾问,聊天的时候,他告诉我的这些话,让我顿时清醒了许多,现在我决定给自己这么多年的工作方式和思维模式做个改变,应该还不算晚。不管你是学习...
linux系统图形界面突然打不开解决方法之一
有很多
朋友
都会遇到这样的情况,上次用的linux的图形界面还是好好的,现在就突然不能进入了。 造成这样的原因,有2种可能(就我个人而言): a.你的设备突然断电造成linux系统某些数据被破坏 b.你的“/”分区已经...
非技术区
15,447
社区成员
58,120
社区内容
发帖
与我相关
我的任务
非技术区
C/C++ 非技术区
复制链接
扫一扫
分享
社区描述
C/C++ 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章