[杂记] 一些我自己的代码规范

一些我自己的代码规范

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

实用工具

具体来讲,当我们想用到一个小工具时,比如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...

posted @ 2022-11-09 23:29  CQzhangyu  阅读(59)  评论(0编辑  收藏  举报