Skip to content

代码规范

代码规范的作用,你们以后会知道的……

在VSCode上有一个快捷键:Alt+Shift+F,可以格式化你的代码,让你的代码符合规范,建议每次写完一个文档的时候都按一下。

排版规范

  • 代码缩进:一定要用制表符(TAB)!!!不要用空格一个一个敲,一般来讲C/C++的缩进为4个空格/TAB。

  • 代码行规范:

  • 每一行的代码长度控制在80列,如果大于80列的代码就要拆成多行编写,并且要在低优先级的操作符处划分新行(比如函数参数的逗号处),且划分的新行要进行缩进。例如:

void esp_get_notification_attributes(uint8_t *notificationUID, 
    uint8_t num_attr, esp_noti_attr_list_t *p_attr)
{
    uint8_t cmd[600] = {0};
    uint32_t index = 0;
    cmd[0] = CommandIDGetNotificationAttributes;
    index++;
    memcpy(&cmd[index], notificationUID, ESP_NOTIFICATIONUID_LEN);
    index += ESP_NOTIFICATIONUID_LEN;
    while (num_attr > 0)
    {
        cmd[index++] = p_attr->noti_attribute_id;
        if (p_attr->attribute_len > 0)
        {
            cmd[index++] = p_attr->attribute_len;
            cmd[index++] = (p_attr->attribute_len << 8);
        }
        p_attr++;
        num_attr--;
    }

    esp_ble_gattc_write_char(gl_profile_tab[PROFILE_A_APP_ID].gattc_if,
                             gl_profile_tab[PROFILE_A_APP_ID].conn_id,
                             gl_profile_tab[PROFILE_A_APP_ID].contol_point_handle,
                             index,
                             cmd,
                             ESP_GATT_WRITE_TYPE_RSP,
                             ESP_GATT_AUTH_REQ_NONE);
}
  • 每行只写一句代码,即分号在每行只出现一次,不要用一行塞多句代码的方式来节省空间

    int b = 0;
    a = b + 1;
    
  • if,else,for,switch,case,while等语句单独占一行

    for (int i = 0; i < 100 ; i++) 
    {
        sum += i;
        printf("%d\n",sum);
    }
    
  • 括号:

  • 使用花括号{}的语句,要保证每个花括号单独占一行(也有把起始花括号放在行尾的,两种均可,但VSCode的自动格式化是前者)

  • 空格:

  • 函数的参数表、ifforwhileswitch等关键字后均要跟一个空格

  • 函数的多个参数之间要跟一个空格

    char IthChar(string s, int i)
    {
        int len;
    
        if (s == NULL) Error("NULL string passed to IthChar");
        len = strlen(s);
        if (i < 0 || i > len) {
            Error("Index outside of string range in IthChar");
        }
        return (s[i]);
    }
    
  • 二元或三元操作符两侧均要有一个空格,如"="、"+"、"?"、"&&"等

  • C bool MouseInText(double x, double y) { return ((y >= 0 && y <= 1.2) ? TRUE : FALSE); }

  • 一元操作符后不要加空格

  • C i++;

  • "."和"->"两个结构体成员操作符前后不要加空格

  • ","和";"只在后面添加空格

  • 注释符"//"、“/ /”和注释的内容之间要有一个空格

  • C // 画出椭圆 void DrawEllipse(Elli e) { MovePen(e.cx + e.a, e.cy); DrawEllipticalArc(e.a, e.b, 0, 360); }

命名规范

  • 变量&函数命名
  • 命名要清晰,要有实际含义,不要用a,b,c之类的做变量名(除了i,j,k这种用来做循环变量的)
  • 若想用多个单词作为一个变量名,单词之间用_隔开,如student_index
  • 尽量少用单词缩写(除非有明确意义且常用),更不要用汉语拼音。
  • 文件命名:文件都用小写的单词命名,千万不要用汉字,详见上文
  • 宏命名:使用大写字母,单词之间用_隔开

注释规范

这里参考了JSDoc

  • 变量注释:在变量后跟行内注释即可
  • 函数注释:参考以下格式,可以体验一下在VSCode上这样写注释到底有多香
/**
 * @brief 判断鼠标是否在直线上
 * 
 * @param x 
 * @param y 
 * @param l 
 * @return true 
 * @return false 
 */
bool MouseOnLine(double x, double y, Line l)
{
    return (((x >= l.startx && x <= l.endx) && (y >= l.starty && y <= l.endy) && ((l.endy - l.starty) * (x - l.startx) == (l.endx - l.startx) * (y - l.starty))) ? TRUE : FALSE);
}
  • 文件注释
/**
 * @file ds18b20.c
 * @author zzy
 * @brief 用于驱动ds18b20
 * @version 0.1
 * @date 2023-05-09
 * 
 * @copyright Copyright (c) 2023
 * 
 */