IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言规范 -> 正文阅读

[C++知识库]C语言规范

1 文件头部规范

创建新文件时,复制到文件头部。

/**
  ******************************************************************************
  * @file    fytpi_dsp.c
  * @author  xxx
  * @brief   DSP
  * @date    2021-8-9
  ******************************************************************************
  * @attention 数字信号处理
  * 文件头注释,宽度为80个字符,为后续代码行宽提供参照。
  * 参考doxygen注释规范
  *
  * Copyright (c) CSU_RM_FYT.
  * All rights reserved.
  *
  * This software component is licensed by xxx under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  * opensource.org/licenses/BSD-3-Clause
  ******************************************************************************
  *修改记录:
  *<时间>      |<版本>      |<作者>      |<描述>     
  *2021-08-21  |v1.0        |xxx       |首次发布
  ******************************************************************************
**/
  
/* includes ------------------------------------------------------------------*/

/* typedef -------------------------------------------------------------------*/

/* define --------------------------------------------------------------------*/

/* variables -----------------------------------------------------------------*/

/* function ------------------------------------------------------------------*/

防止头文件被重复引用

/* 文件名前名加两个下划线“__”,后面加 “_H” */
#ifndef __DISP_H
#define __DISP_H

#endif

2 命名规范

  • 文件名

    能体现文件的核心功能,全部小写,以"_"分隔不同单词

    例如关于控制的pid.c,关于云台的gimbal.c,关于姿态解算的imu_packet.c

  • 函数名

    能体现函数的核心功能,全部小写,以"_"分隔不同单词

    例如关于底盘速度控制的chassis_speed_control()

  • 变量名

    帕斯卡(Pascal)命名法

    首字母大写,不要下划线"_"

    例如变量Chassis、HolderPitchAngle

    *对于需要显示类型的变量,允许添加前缀

    例如全局变量g_GimbalPid

    常用前缀表示,推荐使用如下类型,用int32_t代替int、uint8_t代替unsigned char

    使用部分类型之前,需要包含C/C++标准库**<stdint.h>**

    类型前缀
    int、 int8_t、 int16_t、 int32_ts、 s8、 s16、 s32s16_Speed
    unsigned char、uint8_t、uint16_t、uint32_tu8、u8、u16、u32u8_Data
    double、floatd、ff_PitchAngle
    boolbb_State
    extern、globalgg_Holder
    指针pp_Msg

    复合类型用“_”隔开,例如int32_t类型的全局变量s32_g_Chassis

    结构体变量后缀Struct,如ChassisStruct

    较短的单词可通过去掉“元音”形成缩写

    常见缩写参考https://blog.csdn.net/qq_37851620/article/details/94731227

    全名缩写
    temptmp
    flagflg
    statisticstat
    incrementinc
    messagemsg
    calculatecalc
    numbernum
    maximummax
  • 结构体或联合体

    需要用typedef重定义

    原结构体前加下划线"_",避免与其他变量发生冲突

    typedef struct _Chassis
    {
        M3508_t M3508[4];    /*< 每个成员都要有注释 */
        uint8_t CanData[8];  /*< CAN数据缓冲区 */
        SuperCap_t SuperCap; /*< 超级电容 */
        MoveData_t MoveData; /*< 移动数据 */
    }CHASSIS_T; /*< 全大写,后缀T */
    
  • 宏定义

    全大写,用"_"分隔不同单词,用括号包围定义的参数

    例如

    #define CHASSIS_FOLLOW  (0)
    #define INFO_START      (“Hello”)
    

3 注释规范

  • 文件头部注释如“1 文件头部规范”

  • 函数头注释

    /**
      * @brief  简介,float数字取绝对值
      * @param  参数,InNum输入数字
      * @retval 返回值,输入数字的绝对值
      * @attention 备注
      */
    float f_math_abs(float InNum)
    {
        float RetNum; /*< 返回值 */
        
        /* 计算绝对值 */
        if (InNum>=0)
        {
            RetNum = InNum;
        }
        else
        {
            RetNum = -InNum;
        }
        
        return RetNum;
    }
    
  • 语句注释

    不能使用“//”进行注释

    语句和注释之间至少空一格

    /* */ 中注释与两边星号空一格

    float f_math_abs(float InNum)
    {
        float RetNum; /*< 返回值 */
        
        /* 第一种,写在语句上面 */
        if (in_num>=0)
        {
            RetNum = InNum; /*< 第二种,写在语句后面,用"/*< */"表示注释左边的语句 */
        }
        else
        {
            RetNum = -InNum;
        }
        
        return RetNum;
    }
    

    第一种针对一整块代码进行注释,第二种针对某条单独语句进行注释

4 排版规范

  • 程序块采用统一缩进风格,缩进空格为4个

    尽量使用空格键进行缩进,或设置编辑器将tab键转换为空格,避免不同编辑器tab键长度不同

  • 不同代码块或不同函数之间只空一行

  • 较长语句(>80字)要分成多行书写,例如

    uart2_send_wave(5, 4, &Holder.Pitch.TarAngle, &Holder.Pitch.Angle, 
                          &Holder.Pitch.TarSpeed, &Holder.Pitch.Speed,
                          &Holder.Pitch.Output);
    
  • switch必须要有default

  • if、while、for等无论语句长短,不能省略"{}",例如

     /* 不符合规范 */
    if (Num == 8) return;
    
    if (Num == 8) {
        return;
    }
    
    /* 符合规范 */
    /* if 后空格 */
    /* {}需换行 */
    if (Num == 8) 
    {
        return;
    }
    
    for (i=1; i<n; i++)
    {
        Num = i;
    }
    
  • 空格

    /* 逗号、分号后面加空格 */
    /* =、<、+、-等双目操作符两边加空格 */
    /* ++、--等单目操作符不加空格 */
    for (i = 1; i < n; i++)
    
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:21:43  更:2021-08-22 13:24:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:49:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码