现在我已经了解了C ++的一些基础知识,但我必须承认,我仍然觉得很难处理其他人用C ++编写的代码。这本质上可能是这样,因为C ++允许复杂的对象层次结构,如果只提供C ++项目而没有任何进一步的评论或指令,那么对于我来说,或者至少对我来说很难掌握。
所以我的问题对于你们中经验丰富的C ++程序员来说更是一个问题:如何理解其他人编写的大型C ++项目?
如果我试图了解如何编写10,000行代码的大型项目,那么我很容易迷失方向并且可能会丢失数周。类的函数是指向不同类的函数的指针,这些函数可能会或可能不会被重载,并且可能会或可能不会被其他类继承,等等,而不会结束。
是否有任何实用技巧可以加快我阅读和理解大型C ++项目的能力?是否有这样的提示教程?请详细说明! :)
答案 0 :(得分:7)
我一直在专业编程已经有一段时间了,因此我在我面前反复传递其他人编写的代码库。理解绝非易事,特别是当代码不一致时。
首先要意识到的是,在新的代码库中学习你的方法与重新发现一段时间没有触及的代码库并没有太大的不同。因此,无论是由他人的旧自己写的都无关紧要;既然你可能已经设法应对重新发现之前曾经使用过的代码库,那么你也应该能够发现新的代码库。不要失去希望。
要意识到的第二件事是理解是一个模糊的术语,并且肯定有不同程度。很多时候,没有人要求你完全理解这些来龙去脉;更有可能你会被要求理解代码库的一部分,其中有一个bug或者应该开发一些新的功能。因此,随着时间的推移,您将逐渐了解各个部分,并且您将不可避免地对您最常工作的部分有更深入的了解,而其他部分可能相对抽象甚至完全模糊。没关系,自从人类停止尝试学习所有要学习的东西以来,已经有很长一段时间了。
话虽如此,您可以尝试多种理解轴:
还有其他轴可能有助于对应用程序编写的域有所了解。对域的理解很有用,因为它为您提供了关于应该发生什么的关键洞察力,它还可以帮助您解读注释/函数名称。
答案 1 :(得分:0)
如果它是一个正在运行的工作产品并且您可以“调试”它,那么首先只查看一个特定的功能。
从用户的角度(UI,行为,输入,输出......)了解它是如何工作的。
一旦您从外部了解该功能,只需查找该功能的代码(仅限该功能);起点可能是菜单的处理程序,也可能是对话框或鼠标/指针事件的处理程序。
从那里;手动跟踪一个动作或子功能的代码;跳过深层内部库(暂时将它们视为黑盒子)并了解它是如何工作的。
一旦你知道了这段代码,就可以深入挖掘从上层代码调用的库API。
慢慢来。 不要试图一次理解一切。 绘制依赖关系的原理图(笔和纸)(保持高级别,开头没有类依赖关系)。
祝你好运。答案 2 :(得分:0)
你提到的问题没有明确而简单的答案。不过这里有一些提示:
其他要点:
最好是掌握项目的架构。试图这样做有必要记住项目可能根本没有架构。
学习代码你应该记住你的任务。典型情况 - 您需要修改某些内容或修复错误。如果是这样,请查找代码的正确部分,并将精力集中在它上面。