代码规范
代码规范的作用,你们以后会知道的……
在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);
}
-
每行只写一句代码,即分号在每行只出现一次,不要用一行塞多句代码的方式来节省空间
-
if,else,for,switch,case,while等语句单独占一行
-
括号:
-
使用花括号
{}
的语句,要保证每个花括号单独占一行(也有把起始花括号放在行尾的,两种均可,但VSCode的自动格式化是前者) -
空格:
-
函数的参数表、
if
、for
、while
、switch
等关键字后均要跟一个空格 -
函数的多个参数之间要跟一个空格
-
二元或三元操作符两侧均要有一个空格,如"="、"+"、"?"、"&&"等
-
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);
}
- 文件注释