### 华为编码规范(C,C++)
#### 一、排版
1. **程序块缩进**:根据华为编码规范的要求,程序块应当采用缩进风格编写,且缩进时使用的空格数为4个。对于由开发工具自动生成的代码,允许存在不一致的情况。
- **说明**:此规定旨在提高代码的可读性和一致性,便于开发者理解代码逻辑。通过统一的缩进方式,使得嵌套层次清晰可见。
2. **空行插入**:相对独立的程序块之间以及变量声明之后必须插入空行。
- **示例**:不符合规范的代码如下所示:
```c
if(!valid_ni(ni)) {
// program code
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
```
- **正确做法**:正确的书写格式应当是:
```c
if(!valid_ni(ni)) {
// program code
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
```
3. **长语句分段**:较长的语句(超过80字符)需分成多行书写,长表达式应在低优先级操作符处划分新行,并将操作符放在新行之首。
- **示例**:不符合规范的例子:
```c
perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRAM * sizeof(_UL);
act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied
= stat_poi[index].occupied;
act_task_table[taskno].duration_true_or_false
= SYS_get_sccp_statistic_state(stat_item);
report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)
&& (n7stat_stat_item_valid(stat_item))
&& (act_task_table[taskno].result_data != 0));
```
- **正确做法**:正确的书写格式应当是:
```c
perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRAM * sizeof(_UL);
act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied
= stat_poi[index].occupied;
act_task_table[taskno].duration_true_or_false
= SYS_get_sccp_statistic_state(stat_item);
report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)
&& (n7stat_stat_item_valid(stat_item))
&& (act_task_table[taskno].result_data != 0));
```
4. **循环与判断语句分段**:在循环和判断语句中,如果表达式过长,则应适当分段,具体是在低优先级操作符处划分新行,并将操作符置于新行之首。
- **示例**:不符合规范的例子:
```c
if((taskno < max_act_task_number)
&& (n7stat_stat_item_valid(stat_item))) {
// program code
}
for(i = 0, j = 0; (i < BufferKeyword[word_index].word_length)
&& (j < NewKeyword.word_length); i++, j++) {
// program code
}
for(i = 0, j = 0;
(i < first_word_length) && (j < second_word_length);
i++, j++) {
// program code
}
```
- **正确做法**:正确的书写格式应当是:
```c
if ((taskno < max_act_task_number)
&& (n7stat_stat_item_valid(stat_item))) {
// program code
}
for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)
&& (j < NewKeyword.word_length); i++, j++) {
// program code
}
for (i = 0, j = 0;
(i < first_word_length) && (j < second_word_length);
i++, j++) {
// program code
}
```
5. **函数或过程中的参数分段**:若函数或过程中的参数较长,则需要适当分段。
- **示例**:不符合规范的例子:
```c
n7stat_str_compare((BYTE*)&stat_object,
(BYTE*)&(act_task_table[taskno].stat_object),
sizeof(_STAT_OBJECT));
n7stat_flash_act_duration(stat_item, frame_id * STAT_TASK_CHECK_NUMBER
+ index, stat_object);
```
- **正确做法**:正确的书写格式应当是:
```c
n7stat_str_compare((BYTE*)&stat_object,
(BYTE*)&(act_task_table[taskno].stat_object),
sizeof(_STAT_OBJECT));
n7stat_flash_act_duration(stat_item, frame_id * STAT_TASK_CHECK_NUMBER
+ index, stat_object);
```
6. **单语句一行**:不允许将多个短语句写在同一行中,即一行只能写一条语句。
- **示例**:不符合规范的例子:
```c
rect.length = 0; rect.width = 0;
```
- **正确做法**:正确的书写格式应当是:
```c
rect.length = 0;
rect.width = 0;
```
7. **控制语句格式**:`if`、`for`、`do`、`while`、`case`、`switch`、`default`等语句应自占一行,并且`if`、`for`、`do`、`while`等语句的执行语句部分无论多少都应加上括号 `{}`。
- **示例**:不符合规范的例子:
```c
if (pUserCR == NULL) return;
```
- **正确做法**:正确的书写格式应当是:
```c
if (pUserCR == NULL) {
return;
}
```
#### 二、总结
华为编码规范对于C/C++语言提出了严格的排版要求,旨在提升代码的一致性和可读性。这些规则覆盖了从基本的缩进到复杂的循环和判断语句分段,有助于确保代码质量并降低后期维护的成本。遵循这些规范,不仅可以帮助开发者编写出易于理解和维护的代码,还能促进团队之间的协作,确保项目的一致性和稳定性。
2024-08-12 10:41:56
264KB
华为编码规范
1