问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在开发大C++工程的时候如何判断和避免循环include?

发布网友 发布时间:2022-04-18 07:20

我来回答

2个回答

热心网友 时间:2022-04-18 08:49

include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。


实际顺序

比如说我正在修改一个大型项目的代码。比如里面的类之间有复杂的include关系。如果我增加了新的类A,想让它在某个已有的类B中被调用。那么自然是B的头文件中include A的头文件。但是A的头文件中可能要include C类的头文件,而且很有可能C类 include了B的头文件。B类和C类之间可能有其他类构成include的链条。所以在写类A的时候如何判断这种循环include并且用前向声明forward declaration呢?

操作步骤

1. 尽量使用 forward declaration,namespace 中的 class 都可以前向声明,模板也可以前向声明,例如 class Foo; typedef std::shared_ptr FooPtr。但是 nested class 无法前向声明。

2. 保证每个构成interface的头文件都独立可用,例如 class A 的 cpp 文件第一个包含的头文件应该是 class A 的头文件,以此类推。尽量 cpp/头文件 配对:尽量每一个 class 有一个头文件和一个 cpp 文件,文件名与类名相同,仅扩展名不同。(类模板除外,没办法。)
3. include 头文件使用绝对路径,从VCS的根开始。
4. cpp 文件和头文件中写 include 时按一定的原则分组(例如本项目、本公司、第三方C++库、C++标准库、第三方C库,libc库),每组以内按字母顺序排列头文件。
5. 做到第3点之后,用简单的脚本就能生成头文件的包含关系图(Doxygen也行),然后就很容易看出循环依赖。也不难自动检测。
6. 头文件里不要埋地雷,比如修改 struct 的默认对齐方式,修改编译器的优化级别或警告级别等等

两者之间的差异决定着它们在使用上的区别。使用include指令的页面要比使用jsp:include动作的页面难于维护。前面已经说过,使用JSP指令,如果包含的JSP页面发生变化,那么用到这个页面的所有页面都需要手动更新。在JSP服务器的相关规范中并没要求能够检测出包含的文件什么时候发生改变,实际上大多数服务器页都有去实现这种机制。这样就会导致十分严重的维护问题,需要记住所有包含某一个页面的其他页面,或者重新编译所有的页面,以使更改能够生效。在这点上,jsp:include就体现出了十分巨大的优势,它在每次请求时重新把资源包含进来。在实现文件包含上,应该尽可能地使用jsp:include动作。

最后

热心网友 时间:2022-04-18 10:07

这里面最重要的是细节部分,和代码结构问题。

结构问题:

1.代码结构来自于代码组织的更大范围。提

2.倡拆除许多小的班级。扩展到多个文件。文件中并非全部。

3.这很容易说,现实中或多或少会有违法行为。例如,工程需要使用一些常量字符串(或消息的定义,或枚举值,并有多个变种)。

使用方法:

1.一个结构清晰的结构是将字符串放在同一个头文件中,这样比较起来比较容易。这样,这个字符串文件将几乎包括在内。

2.当稍后添加新字符串时,如果只添加一行,则项目几乎全部编译。这个项目大到可以读一本书。当我想偷懒的时候,我会改变它,然后编译。

3.更好的方法是根据字符串的使用来分割它。

4.例如,有一些支持库。如果你不注意,你会写一个头文件像globalutils。H,其中包含所有配套的图书馆,因为它不在乎这globalutils。H应包括。

技巧总结:

1.总之,它包含更多的资源。然而,这样,我们需要添加一个支持函数,比如旋转角的小函数,还有一个链编译。编写一个小函数只需要1分钟,编译需要30分钟。

2.我宁愿复制和粘贴小函数一次。这很容易导致代码重复。摘要应该减少头文件的重复。需要团队的人有这种意识,并意识到这是不好的。

3.我相信还有很多人,对问题认识不足,你也会被要求,作为一个不贪的方便。它直接包含一个大的头文件,它在短期内是非常方便的,它将在很长一段时间的麻烦。

了解一些C++的常用技术。我相信很多人,甚至介词陈述,都不知道。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 国自然的图跟别人一样可以吗 国自然项目图片查重么 在PS里 能不能画连续画线 arcgis map的使用求教,急,在线等 一张八卦图和云朵的成语? 清晰的近义词和反义词 含糊 的近义词 模棱两可是什么意思啊! ambiguous什么意思 成语 含糊其辞 出处? 打卡照片怎么重新录入? #include 是什么意思? 腾讯续保服务是什么 是这样,我买了一条裤子,商家说不退不换,但是我收到货版型不对,商家让我寄回修改,后来收到的版型和没_百度问一问 宝宝吃米粉过敏症状有哪些 宝宝对大米米粉过敏,有其他的吗? 宝宝吃米粉过敏症状有哪些啊,和奶粉一起吃会不会就不过敏呢? 过敏吗,宝宝吃米粉过敏的症状,宝宝吃米粉过敏怎么办 吃米粉会过敏吗 辅食过敏有什么症状?要把普通米粉换成无敏米粉吗? 怎么查看陌生wifi密码 买高铁票要不要买加速包 三星W579+的简介 三星W579的简介 三星w579与w579+有什么区别吗?主要在性能方面 抢票的时候会自动使用加速包吗? 三星W579都具有哪些特别的功能? 三星w579怎么恢复出厂设置? W579的手机有那些优点啊? 如何备份三星SCH-W579里的联系人? 三星W579怎么样 三星w579普通的和黄金版有什么不同? 三星w579能下载微信吗? 三星手机W579市场价多少钱? 三星W579+黄金版要多少钱? 三星W579多少钱! 三星W579的外观设计 现在三星W579普通版和黄金版的价格是多少? 现在三星W579普通版和黄金版的价格是多少? w579如何恢复出厂设置?