一些我自己的代码规范

写代码的时候,代码规范确实是一个不大不小的问题。为了防止代码变成“屎山”,养成一个好的代码习惯还是十分重要的。本文就简单记录一些章鱼自己的代码规范,(不出例外的话)这些代码将会在本人的所有项目中直接复用。

实用工具

具体来讲,当我们想用到一个小工具时,比如logger,肯定会希望直接把前人(或自己)的代码拿来用。但当我们上网开始找代码准备照抄时,往往又会觉得别人写的代码总是看着不太顺眼。思考一番后,往往又会决定自己重新写一份。如果自己写的时候偷了懒,可能导致这个小工具和当前项目耦合到了一起,不利于日后复用。所以,章鱼认为有必要把平时用到的小工具都封装保存好,以后直接复用,既节省精力,又能保证代码风格一致。

logger

输出,log。这大概是一个项目中最常用的功能。格式输出,输出到文件,带着log_level输出…….这些功能每次都要写,每次都不重样。为了让代码更美观,我直接借鉴了yongchaoHe学长的代码风格,整理出了C和C++两个版本的logger,代码在logger/src

  • Usage

    • C

      跟printf用法相同,直接

      LOG_INFO("n = %d\n", n);
      
    • C++

      跟cout用法相似,直接

      logger << "n = " << n << endl;
      

      也可以快捷地输出一行

      logger.info("n = ", n);
      
  • Result
    image

bash script

在编写bash脚本时,也最好采用上文的输出格式。当编写多个脚本时,可以将一些共用的函数装到一个“头文件”

里,每个脚本引用这个“头文件”即可。

在具体的项目中,脚本所在的目录在这里:

.
├── bin
├── other_folders
│   ...
└── scripts
    ├── other_scripts.sh
    |	...
    └── utils.sh

这个utils.sh就是头文件,其代码是utils.sh

  • Usage

    只需在其它文件里写

    scrp_path=$(cd `dirname $0`; pwd)
    . ${scrp_path}/utils.sh
    

    即可加载此头文件

命令行参数

无非就是getopt,原理大家都懂,但是每次重写一遍估计都和之前长得不太一样。为了防止重写(可以直接ctrl c+v),这里整理了C和C++两个版本,代码还是在logger/src

  • Usage

    • C

      parse_conf(argc, argv);
      

      结果保存在全局变量struct conf_t conf;

    • C++

      Config cfg;
      cfg.parse(argc, argv);
      

      Logger &logger(cfg.logger);即可得到对logger的引用。

计时与等待

同样是一个令人头疼的问题。此前每次想要sleep或者gettime时,总要思考几个问题:需要包含哪些头文件?结果的格式是啥样的?于是干脆把它们封装成几个固定的函数接口好了。

  • Usage

    double gettime_s();
    double gettime_ms();
    double gettime_us();
    void sleep_s(int n_s);
    void sleep_ms(int n_ms);
    void sleep_us(int n_us);
    

中断

直接用Ctrl+C来终止死循环并不是一个很优美的做法。相对地,用自定义的函数处理SIGINT和SIGTERM是一个很好的习惯。

signal来注册一个信号处理函数。当信号处理函数捕获一个SIGINT或者SIGTERM信号时,会将一个全局的变量force_quit设为1。而所有原本的死循环也都要不停地检测force_quit是否为1。

代码见logger/test中的QuitTest。

To be continued or modified…

原文地址:http://www.cnblogs.com/CQzhangyu/p/16875600.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性