《华为软件技术指南手册》是一本全面介绍华为软件开发流程、技术和最佳实践的专业书籍,旨在帮助技术人员提升技能和工作效率。
根据提供的华为软件技术手册的部分内容,我们可以总结出一系列关于编程规范的重要知识点,这些规范主要针对的是源代码的可读性和可维护性。接下来,我们将详细解释这些知识点。
### 一、排版规范
#### 1. 缩进风格
- **规范**:程序块应当采用缩进风格编写,每个缩进包含4个空格。
- **示例**:
```c
if (!valid_ni(ni)) {
program code
}
```
**说明**:由开发工具自动生成的代码可能与该规范不一致,但应尽可能遵循此标准。
#### 2. 程序块之间的空行
- **规范**:相对独立的程序块之间、变量声明之后必须添加空行。
- **示例**:
```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_FRAME * 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
}
```
#### 6. 函数调用参数的分隔
- **规范**:如果函数或过程中的参数较长,则要进行适当的划分。
- **示例**:
```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;
```
#### 7. 控制语句格式
- **规范**:if、for、do、while、case、switch、default等语句自占一行,并且if、for、do、while等语句的执行语句部分无论多少都要加上括号{}。
- **示例**:
```c
if (pUserCR == NULL) {
return;
}
```
#### 8. 对齐规则
- **规范**:只使用空格键进行对齐,不使用TAB键。
#### 9. 代码缩进
- **规范**:函数或过程的开始、结构的定义及循环、判断等语句中的代码都应采用缩进。
通过遵循以上规范,可以显著提高代码的可读性和可维护性,有助于团队协作和项目的长期发展。