写代码技巧的总结

看别人代码的思路总结

  1. 应该着眼于代码的全局设计,然后再着眼于局部功能的实现。————在过程中才能保持清醒的头脑。
    因为工程的代码逻辑往往很复杂,如果着眼于某个小算法的实现,往往会沉迷其中,反而丢失对整个工具功能的理解。从整体上来把握局部,反而能够增强目的,强化效率。
  2. 看一个工具模块的实现,应该抓住模块的输入输出,以及模块内部是通过什么字段作为标识实现的分类。比如在杆提取算法中,最终发现还是通过Classification字段实现的分类标识。
  3. 每个函数都应该基于自己的函数接口来写,尽量不要存在依赖上层调用者的逻辑。比如,不管上层函数有没有对实参传递的数据进行检测,当前函数内部都应该对其进行检测。这也是“高内聚、低耦合”的一种体现。

写大型工程项目的思路总结

1.大型工程项目中,应该规范化数据存储文件夹的命名。 ------ 实现代码规范化执行
因为输入数据文件类型多样,所以需要对程序的输入输出文件夹的命名做严格的限制。这也是HAD map成熟生产流程应该必备的。
2.写代码的逻辑顺序应该由上到下每层细化下来,保证每层判断逻辑的一致性。
先从总体上,拟好整个项目的代码框架,把握住整体设计,然后基于每个设计好的API进行编程。这样从上到下的设计,能够使代码的逻辑性更强,也能满足“可维护、可拓展”的原则。
3.根据客户需求确定配置文件。配置文件中清晰定义各个分类要素的开关,通过开关的设置实现对分类要素的选择。
4. 如果自己的算法原理确认没有出错,但是结果输出不对,考虑是否自己代码实现过程变量引用错误。(这是我反复出现的错误,尤其是C++)。
5. 编译大型工程时,一般release下编译较慢,而debug下编译较快。release对应的发行版,编译时它会对代码执行大量的优化等操作,导致编译比较耗时。(这是我编译大型点云分类程序真实的经历)。

Debug时的一些技巧

每条都是实战总结!
  1. 每次调试的中间输出应该及时删除,因为有时系统不能及时更新文件,容易造成错误。删除中间输出后,每次重跑代码都能观察到输出结果的变化。(这是吃过的亏
  2. 写代码的过程中,一定要确定每一个变量定义时都做好了初始化,并且确保初始化时的右值值正确,不然容易导致相关输出不符合预期。(这是我在“杆按照需求中间输出”时吃的亏。因此为路径名初始化时使用了空值,导致了路径初始化失败,代码默认不执行,直接跳过了杆按照需求过滤及背景过滤的代码,导致杆的输出结果不符合预期)。
  3. 建立的数组一定要防止下标越界导致的内存泄露。Linux下的C++可执行程序对这方面的要求不强,但是Java程序会有严格要求。这是我Linux下编程遇到的实例。所以,C++程序最好先在Windows下编译成功之后,再拿到Linux下。
  4. 编译时遇到 “ ***:不明确的定义 ”问题解析:这类问题往往是在链接时出现了找不到准确的函数地址造成的,说白了就是使用的第三方库和编写的函数中,存在2个相同的函数名或变量名,导致链接器找不到准确的地址。因此,解决方案是,修改“重复的名字”。实例:在封装的so中,extract_segment_features.hpp使用了带有 npcl::assist::log下的日志函数,但coding的时候,只 using namespace npcl::assist,log没有写上。而filters工程中,使用了pcl下的ransac模块,里面使用STL->cmath.h中的log函数,因此,在编译的时候,日志函数npcl::assist::log::instance()与cmath.h中的log函数产生了冲突,即log::instance() 与 log() 中开始都是 log,链接器无法分辨该使用哪个。这个问题在 .h或.hpp中容易出现,如果在 .cpp中出现 npcl::assist,没有写到 log,倒不会编译出错。

写代码的一些技巧

  1. 一定要确认思路正确了再下笔。这个过程中,注意力一定要集中。确认思路正确、逻辑无误后,再下笔,开始写。可以一边写,一边调试。(这是leetcode刷题时的感悟。到公司后,因为思路错误,导致写了半小时的代码,直接思路错误,这就好比写语文作文时的偏题,一切的白费!)

2、起变量名的时候,注意避开可能的同名。如果与第三方库中的函数名或变量名相同,会在链接时发生冲突,产生“不明确的定义”。尤其是函数命名,因为变量存在局部性。问题实例,我在封装一个函数的时候,调用了封装的日志库,它的命名空间中有“log”;同时,引用的第三方库调用了cmath中的log函数;相同的log,造成了编译时出现“log:不明确的定义”的报错。

代码中文乱码问题

1.直接将对应cpp文件、头文件利用notepad++转为utf8格式。

2.C++程序可执行程序强制退出,和 命令行输出着色。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值