首页 > 其他分享 >[杂记] 一些我自己的代码规范

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

时间:2022-11-09 23:44:23浏览次数:70  
标签:头文件 代码 规范 sh 杂记 Usage sleep logger

一些我自己的代码规范

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

实用工具

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

标签:头文件,代码,规范,sh,杂记,Usage,sleep,logger
From: https://www.cnblogs.com/CQzhangyu/p/16875600.html

相关文章

  • Java代码块运行顺序细节阐述
    以下这个例子非常好的阐述了父子类同时存在时静态代码块/静态变量初始化,普通代码块/普通成员变量初始化,构造器之间的具体运行顺序。注意,在构造器开头,我们可以看作按顺序隐......
  • 爱心代码Html
    1<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">2<HTML>3<HEAD>4<TITLE>Love</TITLE>5<METANAME="Generator"CONTENT="Ed......
  • 面试:排序算法代码实现
    目录冒泡排序插入排序希尔排序选择排序堆排序冒泡排序/*====================冒泡排序=======================*/voidbubble_sort(intnums[],intn){for(int......
  • 爱心代码 HTML/CSS3
     <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><TITLE>Love</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author"......
  • AIRIOT物联网低代码平台如何配置MQTT驱动?
    MQTT驱动配置简介MQTT全称为消息队列遥测传输(英语:MessageQueuingTelemetryTransport),是ISO标准(ISO/IECPRF20922)下基于发布(Publish)/订阅(Subscribe)范式的消息协......
  • 花式浪漫爱心代码,爱心树来啦
    爱心代码如下:#coding=gbk"""作者:向阳逐梦@时间:2022/11/0921:20"""importturtleimportrandomdeflove(x,y):#在(x,y)处画爱心lalalalv=turtle.Turtle()......
  • 2.Restful规范
    restful规范是一套主流的API规范,目的是将前后端统一规范。节省二者的沟通成本,提高开发效率,常见的规范有以下9种1.https协议在实际项目部署中,使用https协议代替http,目......
  • 《代码大全》读书笔记1
    之所以阅读这本书,是想在阅读风格较为轻松的《程序员修炼之道》之后阅读一本更细致、更严肃的“进阶”读物。  *第一部分打好基础 第一章欢迎进入软件构建的世界......
  • 《代码大全2》读书笔记2
    第五章软件构建中的设计 > 设计的限制:设计是一个“险恶”的问题:只有通过解决或至少部分解决,才能明确地定义它。设计中会有很多错误和修正的过程。设计有诸多限制,要......
  • 《代码大全2》读书笔记六
    第十九章一般控制问题19.1布尔表达式【回顾】在读书笔记二、读书笔记三中有关于变量名与布尔变量的讨论,其中提到:布尔变量名应该使用显然有两个状态的名字,如doneok;可......