【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )
2023-06-13 09:18:00 时间
文章目录
一、C 项目开发代码规范
上一篇博客 【C 语言】字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ;
C 项目开发代码规范 :
- 形参合法性判断 : 函数入口处 , 判断函数形参是否为空 , 如果为空 , 直接返回 ;
int get_value(char *key_value, char *key, char *value, int *value_len)
{
// 任何函数调用前 , 先判定函数形参正确性
if(key_value == NULL || key == NULL || value == NULL || value_len == NULL)
{
printf("key_value == NULL || key == NULL || value == NULL || value_len == NULL\n");
return -1;
}
}
- 函数返回值局部变量 : 函数中 , 建议定义一个 局部 返回值变量 , 该变量要经常使用 , 基本上每一步操作 , 都要有返回值 , 针对每个返回值都要有变量接收 ;
// 各种函数执行返回值
int ret = 0;
// III . 将 = 字符后面的空格去除
ret = trim_space(p, value);
if(ret != 0)
{
printf("error : trim_space %d \n", ret);
return ret;
}
- 函数中不用全局变量 : 在函数中 , 尽量 不使用全局变量 , 一旦涉及到全局变量 , 该函数肯定是线程不安全的 ; 参考 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) 博客 , 该博客中就使用了全局变量存放函数结果 , 不支持多线程访问 ;
- 函数中使用局部变量接收形参 : 函数形参中的指针变量 , 不要直接使用 , 如果涉及到修改指针指向的操作 , 建议 创建 函数 中 局部指针变量 接收该 形参指针变量 ;
int get_sub_count(char *main_str, char *sub_str, int *sub_count)
{
// 为了不修改 函数 形参 的值 , 使用指针变量接收 函数形参
char *main_str_tmp = main_str;
char *sub_str_tmp = sub_str;
}
- 函数返回值 : 一般返回 int 值 , 用于 标记函数执行是否成功 , 如果失败 , 返回错误码 ;
- 形参作返回值 : 函数的实际返回值 , 都是通过 函数形参指针 , 对 形参指针 进行 间接赋值 完成 ;
- 形参返回值处理 : 返回值不要直接修改 , 先定义临时局部变量保存返回值 , 最后执行完毕 , 再将返回值 通过 间接赋值 赋值给 形参中的 返回值指针 指向的 内存地址 ;
// 保存非空字符串长度 , 局部临时变 , 计算结果
int count_tmp = 0;
// 计算结果
count_tmp = j - i + 1;
// 通过间接赋值设置返回值
*count = count_tmp;
相关文章
- Vue项目实战05:18n实现多语言自动切换-浏览器语言设置「建议收藏」
- 湖仓一体电商项目(十一):编写写入DWS层业务代码
- 从一个开源项目到庞大的开源矩阵,他是怎么做到的?
- 2.Go语言项目操作MySQL数据库实践
- 2022-07-25:xiu是用rust语言编写的流媒体服务器软件项目。k8s安装xiu,drone文件如何写?
- SpringBoot 多模块项目打包部署保姆级教程
- SSM项目中使用拦截器和过滤器
- 【Kotlin】Kotlin 中使用 ButterKnife ( 仅用于适配 Kotlin 语言 | 不推荐新项目使用 )
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
- GO语言——IO项目
- SpikeGPT项目原作解读:使用脉冲神经网络的生成式语言模型
- Django+Vue前后端分离项目的部署详解编程语言
- Go语言常见大型Web项目分层(MVC架构)
- 掌握 C 语言,实现 Linux 项目梦想(clinux项目)
- 版本控制构建Linux项目:Git版本控制实践(linuxgit搭建)
- c语言在linux下项目开发之旅(c linux 项目开发)
- c语言驱动的MySQL项目开发实战(c mysql项目开发)
- 火力全开电商项目Redis高并发优化实践(电商项目redis高并发)
- 从javascript语言本身谈项目实战
- 使用Grunt.js管理你项目的应用说明