C语言高级开发技巧
文章平均质量分 68
本专栏面向具有 C 语言基础的开发者,聚焦于实际项目开发中的关键技术和最佳实践
clear code
一路向前,莫问前程,前途似锦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言深入剖析:高性能事件队列的设计艺术
/ 事件处理函数类型定义// 结果回调函数类型定义// 事件结构// 链表节点// 事件处理函数// 事件数据// 数据大小// 结果回调函数// 事件优先级// 事件队列结构// 事件链表头// 互斥锁// 条件变量// 运行状态// 统计信息// 最大队列大小事件结构设计巧妙,既包含基本的事件信息,又支持回调机制队列结构采用链表实现,支持动态增长使用互斥锁和条件变量实现线程同步包含统计信息,便于监控和调试内存管理高效,使用静态事件池。原创 2025-04-09 17:32:00 · 3215 阅读 · 0 评论 -
C语言资源自动释放实现详解:基于GCC cleanup属性
cleanup该宏用于定义清理函数,cleanup_fn将在变量作用域结束时自动调用。AUTO_FREE用于自动释放内存。用于自动关闭文件。模块通过自动资源管理机制,极大地简化了C语言中的资源管理工作。它不仅提高了代码的安全性和可维护性,还减少了资源泄漏的风险。对于需要频繁分配和释放资源的场景(如嵌入式开发、文件操作等),该模块是一个非常实用的工具。通过简单的宏定义和清理函数,为C语言开发者提供了一种类似RAII(资源获取即初始化)的编程体验。原创 2025-04-09 16:59:40 · 4507 阅读 · 0 评论 -
通用接口函数注册模块设计与实现
通用接口函数注册模块()是一个用于实现动态函数注册的轻量级工具。它通过偏移量计算和函数指针赋值的方式,实现了C语言中类似面向对象的接口机制。模块支持动态注册、调试日志输出,并且易于扩展。void* ctx;// 设备上下文通过接口注册模块,可以在C语言中实现类似面向对象的接口机制。它不仅简化了代码结构,还提高了模块的可扩展性和可维护性。无论是驱动开发还是插件系统,这个模块都能提供强大的支持。原创 2025-04-08 18:56:03 · 2854 阅读 · 0 评论 -
C语言函数指针实战指南
函数指针是指向函数的指针,它存储函数的地址。通过函数指针,我们可以在运行时动态地选择调用不同的函数。原创 2019-04-28 19:05:59 · 2877 阅读 · 0 评论 -
关于-open与fopen的区别
文章目录Linux--open与fopen的区别open()举例:fopen举例open和fopen的区别:来源适用范围文件IO层次总结Linux–open与fopen的区别open()#include <stdio.h>int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下:原创 2021-11-27 11:40:52 · 5457 阅读 · 0 评论 -
关于 -指针运行
指针指针的基础使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值在计算机内部存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,称为指针变量(pointer variable)。在不影响理解的情况中,有时对地址、指针和指针变量不区分,通称指针。例如:指针指向的内存区域中...原创 2019-05-27 20:00:59 · 616 阅读 · 0 评论 -
关于-alarm函数使用
linux-alarm函数[1] 引用头文件:#include <unistd.h>; [2] 函数标准式:unsigned int alarm(unsigned int seconds); [3] 功能与作用:alarm()函数的主要功能是设置信号传送闹钟,即用来设置信号SIGALRM在经过参数seconds秒数后发送给目前的进程。如果未设置信号SIGALARM的处理函数,那么alarm()默认处理终止进程。 [4] 函数返回值:如果在seconds秒内再次调用了alarm函数设原创 2021-11-23 20:01:48 · 1801 阅读 · 0 评论 -
关于-sscanf() 函数使用
文章目录linuxC - sscanf() 函数使用参数返回值举例linuxC - sscanf() 函数使用int sscanf(const char *str, const char *format, ...)参数参数str为要读取数据的字符串;format为用户指定的格式;… 为变量,用来保存读取到的数据返回值成功则返回参数数目,失败则返回-1,错误原因存于errno 中。sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串原创 2021-12-05 11:36:16 · 3108 阅读 · 0 评论 -
关于-函数的理解学习
文章目录函数的基础知识函数函数的说明函数的使用函数之间的参数传递复制传递方式地址传递方式全局变量函数与数组复制传递方式地址传递方式指针函数函数指针函数指针数组递归函数函数的基础知识函数函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。一般形式如下:<数据类型> <函数名称>( <形式参数说明> ){ ...原创 2019-05-28 10:58:56 · 487 阅读 · 1 评论 -
C语言字符串格式化函数详解
【代码】C语言字符串格式化函数详解。原创 2022-02-17 11:50:42 · 1360 阅读 · 0 评论 -
C语言柔性数组(零长度数组)详解
柔性数组(Flexible Array Member)是C99引入的特性,允许结构体的最后一个成员是未知大小的数组。原创 2021-11-23 10:09:12 · 8490 阅读 · 0 评论 -
串口数据打印工具函数:优雅地调试与分析二进制数据
串口打印函数-printf_debug_log记录一下自己常用的串口打印函数,常用语抓包分析。void printf_debug_log(uint8_t *buff, uint32_t len,bool flag){ static uint32_t print_cnt = 0; if(print_cnt ==0) { if(flag) { printf("send uint8_t print_packet[%d]= {\r\n", len); } else { printf(原创 2020-08-13 20:11:28 · 1440 阅读 · 0 评论 -
关于-队列实现消息触发机制
C语言—队列处理消息机制使用背景介绍嵌入式开发中,经常使用触发flag标志位去处理很多事件,最典型的就是中断触发类型,flag置位。然后主程序轮询检查flag状态,如果检测flag置位条件满足,则进行下一步的操作,比如说中断读取串口数据操作。通用处理情况中断回调函数处理如下,将触发标志置1rt_err_t rz_uart1_recv_callback(rt_device_t dev, rt_size_t size){ ....... recv_flag = 1; .......原创 2020-08-05 16:56:57 · 4270 阅读 · 1 评论 -
关于-针对统一的数据对象进行管理
文章目录UML关系图软件构建思路数据管理类成员属性和成员函数功能实现接口数据对象实例操作内部声明和属性功能实现UML关系图从UML用例图可以看出,rz_sensor_data_manager_t 是一个针对传感器数据的一个统一管理类,包含了一些统一的操作功能,而接口sensor_data_interface_t 是针对 数据对象的实现。知识点补充:【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现【箭头指向】:带三角箭头的虚线,箭头指向接口是一种类与接口的关系,表示类是接口所有原创 2020-07-27 23:31:47 · 351 阅读 · 0 评论 -
C语言-对“hard code”的思考
文章目录hard codehard code原文链接先说Hard Code吧,这个问题我想有经验的程序员都知道,但是还是说一下吧。比如有这么一段代码:int sum = count * price * 0.75;这里面的0.75就是一个"Magic number",也叫hard code。有人翻译成“硬编码”。这样是不好的,因为1。读代码的人不会知道0.75是什么意思。2。如果这个数字将来要变化,恨难修改。3。如果是个字符串,说不定有spell error。…问题很多,我就不多说了,我们转载 2020-07-11 22:49:11 · 829 阅读 · 0 评论 -
C语言野指针详解与防范
野指针是指向无效或未知内存区域的指针。指针未初始化指针所指向的内存已被释放指针超出变量作用域初始化检查及时释放置空处理。原创 2020-05-17 22:39:55 · 1686 阅读 · 0 评论 -
深入剖析C语言全局变量:从风险到最佳实践
最小可见性原则:使用static限制变量作用域封装访问原则:提供受控的访问接口结构化组织原则:相关变量组织为结构体状态完整性原则:维护变量的有效状态线程安全原则:保护共享变量的并发访问。原创 2020-04-14 23:17:37 · 5149 阅读 · 0 评论 -
C语言排序算法面向对象实现
使用结构体模拟面向对象,实现排序算法的封装。原创 2019-07-13 13:43:41 · 1407 阅读 · 0 评论 -
如何写出优美的C代码?
文章目录出处如何写出优美的C代码?基础知识结构体函数指针将函数指针作为结构体的成员面向对象语言的特性语言层次的面向对象C 语言的面向对象定义接口结束语出处https://www.ibm.com/developerworks/cn/linux/l-cn-cobject/index.html?mhsrc=ibmsearch_a&mhq=如何写出优美的C代码如何写出优美的C代码?面向对象...转载 2019-07-13 10:50:40 · 373 阅读 · 0 评论 -
关于-面向对象的软件设计
文章目录文章参考大纲面向对象的封装、继承和多态继承封装多态C语言实现封装、函数指针过程式OO思想从一个命令解析器的案例开始过程化程序设计采用封装思想设计实际案例含很多模块的软件初始化实际案例-uboot启动初始化部分一个嵌入式图形框架的C面向对象过程式OO思想.C语言实现继承和多态,模拟虚函数提炼软件的中间层综合案例,对象式思维锻炼文章参考https://blog.youkuaiyun.com/weixi...原创 2019-06-30 16:20:22 · 3186 阅读 · 0 评论 -
关于- 常用字符串操作函数
#include <stdio.h>#include <assert.h>typedef struct string_handle{ char *str; char* (*mystrcpy)(char *strDest, const char *strSrc); char* (*mystrncpy)(char *strDest, const char *st...原创 2019-07-17 10:18:10 · 298 阅读 · 1 评论 -
关于- 函数指针数组的妙用(替代switch-case)
文章目录函数指针数组案例 -原始计算器作用函数指针数组函数名可以通过函数指针加以保存,那们也一定能定义一个数组保存若干个函数名,这就是函数指针数组。正确使用函数指针数组的前提条件是,这若干个需要通过函数指针数组保存的函数必须有相同的输入、输出值。int(*parr1[10])();parr1先和[]结合,说明parr1是数组,数组的内容是int(*)()类型的函数指针函数指针数组的用途...原创 2019-07-24 21:22:13 · 2782 阅读 · 1 评论 -
卫语句:简化条件逻辑的有效方法
文章目录卫语句示例1示例2总结卫语句在代码中存在过多条件语句的时候,建议把多层条件语句改为卫语句或其他方式推荐尽量少用else, if-else的方式可以改写成: if(condition){ ... return obj; } // 接着写else的业务逻辑代码;卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then...原创 2019-07-24 22:37:14 · 6533 阅读 · 0 评论 -
关于-LW_OOPC学习01
文章目录参考摘要为什么要用面向对象?为什么不直接使用C++?LW_OOPC是什么?LW_OOPC宏介绍参考轻量级的面向对象C语言编程框架LW_OOPC介绍作者: 金永华、陈国栋摘要本文介绍一种轻量级的面向对象的C语言编程框架:LW_OOPC。LW_OOPC是Light-Weight Object-Oriented Programming in(with) C的缩写,总共一个.h文件,20...原创 2019-08-13 17:13:24 · 820 阅读 · 2 评论 -
关于-LW_OOPC学习02
文章目录参考LW_OOPC配置LW_OOPC宏说明(1)INTERFACE(2)ABS_CLASS(3)CLASS(4)EXTENDS 和 IMPLEMENTS(5)ABS_CTOR 和 END_ABS_CTOR(6)FUNCTION_SETTING(7)CTOR 和 END_CTOR(8)SUPER_CTOR(9)DTOR 和 END_DTOR(10)SUPER_PTR(11)SUPER_PTR...原创 2019-08-14 09:21:57 · 638 阅读 · 1 评论 -
嵌入式系统中的首次执行标志设计模式
首次执行标志设计模式是一种简单而有效的代码组织方式,特别适合嵌入式系统中需要特殊处理首次执行逻辑的场景。通过合理的结构设计,可以显著提高代码的可读性、可维护性和可靠性。在实际应用中,应根据具体需求选择合适的实现方式,并注意状态管理、内存使用和并发安全等问题。这种设计模式的使用,能够帮助我们写出更加优雅和健壮的代码。原创 2019-09-07 09:23:50 · 2296 阅读 · 1 评论 -
C语言异常处理机制:setjmp和longjmp的优雅实现
setjmp/longjmp提供了在C语言中实现异常处理的可能性。通过合理的封装和使用,我们可以实现类似C++的异常处理机制,使代码更加健壮和优雅。但要注意,这种机制应该谨慎使用,并确保正确处理资源清理问题。原创 2019-09-12 11:49:14 · 2874 阅读 · 0 评论 -
函数指针数组:优雅的嵌入式初始化方案
函数指针数组为嵌入式系统的初始化流程提供了一种优雅且高效的解决方案。通过合理的抽象和封装,不仅简化了代码结构,还提高了系统的可维护性和可靠性。在实际应用中,应根据具体需求选择合适的实现方式,并注意初始化顺序、错误处理和资源管理等关键问题。原创 2019-09-24 17:11:55 · 758 阅读 · 0 评论 -
关于-有限状态机(FSM)
文章目录状态机-概述实现方法使用if/else if语句实现的FSM使用switch case函数指针实现FSM参考状态机-概述有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。FSM是一种逻辑单元内部的一种高效编程方法,在服务器编程中,服务器可以根据不同状态或者消息类型进行相应的处理逻辑,...原创 2019-07-08 15:22:44 · 4566 阅读 · 0 评论
分享