### 华为编程规范与范例经典
#### 一、排版规范
1. **程序块缩进**:根据华为编程规范的要求,程序块应当采用缩进风格编写,且缩进的空格数统一为4个。对于由开发工具自动生成的代码,允许有一定的不一致性。这种规范有助于提高代码的可读性和美观性。
- 示例:不符合规范的代码:
```c
if(!valid_ni(ni))
{
//programcode
}
repssn_ind=ssn_data[index].repssn_index;
repssn_ni=ssn_data[index].ni;
```
- 正确的书写方式:
```c
if(!valid_ni(ni))
{
//programcode
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
```
2. **空行使用**:相对独立的程序块之间以及变量声明之后必须加入空行,以增加代码的可读性。这样做的目的是为了使程序更加清晰易懂。
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));
```
4. **循环和判断语句**:如果循环、判断等语句包含较长的表达式或语句,同样应当进行适当的划分。这包括在较低优先级的操作符处断开并放置操作符于新行之首。
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);
```
6. **单行语句**:避免在一个语句行中编写多个语句,即每个语句都应单独占据一行。
7. **控制语句的格式**:`if`、`for`、`do`、`while`、`case`、`switch`、`default`等控制语句应当自占一行,且其执行语句部分无论多少都要加括号 `{}`。
8. **对齐规则**:对齐只能使用空格键,不能使用 `Tab` 键。这是为了避免不同编辑器下由于 `Tab` 键宽度设置不同而导致的代码布局不整齐问题。
9. **函数和过程的缩进**:函数或过程的开始、结构的定义以及循环、判断等语句中的代码都需要采用缩进风格编写。
通过遵循这些规范,开发者能够编写出更易于阅读和维护的代码,同时也提升了团队协作的效率。这对于大型项目尤为重要,能够帮助减少错误并提高代码质量。