![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言实战运用提高
文章平均质量分 60
讲述实际开发过程中C语言的关键使用技巧
clear code
一路向前,莫问前程,前途似锦
展开
-
关于-函数指针运用
函数指针的声明函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表了函数的入口地址。当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,可以将函数作为参数传递给函数指针。函数指针变量说明的一般形式如下:<数据类型> (*函数指针名称)(<参数说明列表>);<数据类型>是函数指针所指向的函数的返回值类型<参数说...原创 2019-04-28 19:05:59 · 2748 阅读 · 1 评论 -
关于-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 · 5283 阅读 · 0 评论 -
关于 -指针运行
指针指针的基础使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值在计算机内部存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,称为指针变量(pointer variable)。在不影响理解的情况中,有时对地址、指针和指针变量不区分,通称指针。例如:指针指向的内存区域中...原创 2019-05-27 20:00:59 · 528 阅读 · 0 评论 -
关于-linux- pthread_attr_destroy 使用理解
linux - pthread_attr_destroy 使用问题:为何退出thread或者创建thread失败时,需要调用pthread_attr_destroy?pthread_t a_thread;res = pthread_create(&a_thread, &thread_attr, pfThreadMain, pArg);if (res != 0){ perror("Thread SendCmd creation failed"); return RET_ERR;原创 2021-11-23 15:11:50 · 10794 阅读 · 3 评论 -
关于-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 · 1648 阅读 · 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 · 2849 阅读 · 0 评论 -
关于 -access 检查用户对文件的权限
linux -access 检查用户对文件的权限函数功能access函数用于检查用户/进程对一个文件的权限情况,包括读、写、执行的权限。因为Linux内核是根据进程的有效用户ID和有效组ID来决定一个进程具有某个文件的访问权限。因此,在编写调整用户ID的程序时,在访问一个文件之前必须明确检查该用户是否拥有对此文件的访问权限。描述#include <unistd.h>int access(const char *pathname, int mode);pathname 是文件原创 2021-11-29 19:41:39 · 4897 阅读 · 0 评论 -
关于-函数的理解学习
文章目录函数的基础知识函数函数的说明函数的使用函数之间的参数传递复制传递方式地址传递方式全局变量函数与数组复制传递方式地址传递方式指针函数函数指针函数指针数组递归函数函数的基础知识函数函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。一般形式如下:<数据类型> <函数名称>( <形式参数说明> ){ ...原创 2019-05-28 10:58:56 · 359 阅读 · 1 评论 -
关于 sprintf & snprintf 函数使用
文章目录sprintf & snprintf 函数使用使用 sprintf 的常见问题strncpy, strncat和snprintf的区别sprintf & snprintf 函数使用sprintf 函数使用在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多sprin原创 2022-02-17 11:50:42 · 1106 阅读 · 0 评论 -
关于-变长数组(柔性数组) 的使用
C语言变长数组(柔性数组) struct中uint8_t data[0]的用法零长度数组介绍typedef struct { cp_head_t header; uint8_t data[0];}__attribute__((packed)) cp_frame_t;首先对 0长度数组, 也叫柔性数组 :用途 : 长度为0的数组的主要用途是为了满足需要变长度的结构体用法 : 在一个结构体的最后, 申明一个长度为0的数组, 就可以使得这个结构体是可变长的. 对原创 2021-11-23 10:09:12 · 7926 阅读 · 0 评论 -
关于-常用串口打印数据函数-printf_debug_log
串口打印函数-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 · 1240 阅读 · 1 评论 -
关于-队列实现消息触发机制
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 · 3943 阅读 · 1 评论 -
关于-针对统一的数据对象进行管理
文章目录UML关系图软件构建思路数据管理类成员属性和成员函数功能实现接口数据对象实例操作内部声明和属性功能实现UML关系图从UML用例图可以看出,rz_sensor_data_manager_t 是一个针对传感器数据的一个统一管理类,包含了一些统一的操作功能,而接口sensor_data_interface_t 是针对 数据对象的实现。知识点补充:【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现【箭头指向】:带三角箭头的虚线,箭头指向接口是一种类与接口的关系,表示类是接口所有原创 2020-07-27 23:31:47 · 236 阅读 · 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 · 659 阅读 · 0 评论 -
关于-野指针处理
文章目录野指针概念野指针概念原创 2020-05-17 22:39:55 · 1410 阅读 · 0 评论 -
关于-合理使用全局变量
C语言-合理使用全局变量全局变量在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件缺点全局变量存在周周期长,将会占用更多的内存。全局变量多处被调用,使全局变量的值变得不确定。用全局变量会增加程序的耦合性,会有一定移植麻烦,代码重用率低。全局变量,使用和更改他的地方多了以后,各个地方逻辑关系...原创 2020-04-14 23:17:37 · 4657 阅读 · 0 评论 -
关于-常用排序算法
文章目录C 排序算法冒泡排序选择排序插入排序shell排序测试C 排序算法采用面向对象的思想对排序进行封装,即成员变量和实现方法的接口typedef int DateType;typedef struct sort{ DateType *arr; DateType len; void (*BubbleSort)(struct sort * sort); void (*Se...原创 2019-07-13 13:43:41 · 1179 阅读 · 1 评论 -
如何写出优美的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 · 229 阅读 · 0 评论 -
关于-面向对象的软件设计
文章目录文章参考大纲面向对象的封装、继承和多态继承封装多态C语言实现封装、函数指针过程式OO思想从一个命令解析器的案例开始过程化程序设计采用封装思想设计实际案例含很多模块的软件初始化实际案例-uboot启动初始化部分一个嵌入式图形框架的C面向对象过程式OO思想.C语言实现继承和多态,模拟虚函数提炼软件的中间层综合案例,对象式思维锻炼文章参考https://blog.csdn.net/weixi...原创 2019-06-30 16:20:22 · 3021 阅读 · 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 · 221 阅读 · 1 评论 -
关于- 函数指针数组的妙用(替代switch-case)
文章目录函数指针数组案例 -原始计算器作用函数指针数组函数名可以通过函数指针加以保存,那们也一定能定义一个数组保存若干个函数名,这就是函数指针数组。正确使用函数指针数组的前提条件是,这若干个需要通过函数指针数组保存的函数必须有相同的输入、输出值。int(*parr1[10])();parr1先和[]结合,说明parr1是数组,数组的内容是int(*)()类型的函数指针函数指针数组的用途...原创 2019-07-24 21:22:13 · 2497 阅读 · 1 评论 -
关于-优化 if else 程序方法
文章目录卫语句示例1示例2总结卫语句在代码中存在过多条件语句的时候,建议把多层条件语句改为卫语句或其他方式推荐尽量少用else, if-else的方式可以改写成: if(condition){ ... return obj; } // 接着写else的业务逻辑代码;卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if - then...原创 2019-07-24 22:37:14 · 5602 阅读 · 1 评论 -
关于-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 · 620 阅读 · 1 评论 -
关于-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 · 453 阅读 · 1 评论 -
关于-调试技巧编程-IS_FIRST模式
文章目录前提介绍代码示例前提介绍最近项目进行调试最后阶段,在读取数据时,与上位机联机调试,发现读取的第一包数据有异常的概率,通过抓包打断点的方式,分析获取的数据源,因为只有第一次调取读取函数有异常,所以对第一次读取的数据进行判断,如果小于正常值,则进入断点,成功抓取数据;如果获得第一次数据正常,则不满足异常条件,直接重启,进行反复抓包测试;代码示例bool olt_vib_temp_po...原创 2019-09-07 09:23:50 · 2048 阅读 · 0 评论 -
关于-异常处理
文章目录概述异常处理机制:setjmp()函数与longjmp()函数异常处理过程代码实例宏定义升级改造参考概述什么是异常?异常一般指的是程序运行期(Run-Time)发生的非正常情况。异常一般是不可预测的,如:内存不足、打开文件失败、范围溢出等。UNIX 使用信号给出异常,并当发生异常时转跳到信号处理过程进行异常处理。DOS下的信号对比UNIX系统而言相对较少。我们知道,不管是在c++还是...原创 2019-09-12 11:49:14 · 2484 阅读 · 1 评论 -
关于-利用init_fnc_t[]优化初始化函数列表
文章目录代码片段代码片段typedef int (*init_fnc_t)(void);init_fnc_t init_sequence[] = { stm32_hw_timer_init, stm32_hw_usart_init, stm32_hw_led_init, NULL,};/** * @brief The application entry point....原创 2019-09-24 17:11:55 · 523 阅读 · 0 评论 -
关于-有限状态机(FSM)
文章目录状态机-概述实现方法使用if/else if语句实现的FSM使用switch case函数指针实现FSM参考状态机-概述有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。FSM是一种逻辑单元内部的一种高效编程方法,在服务器编程中,服务器可以根据不同状态或者消息类型进行相应的处理逻辑,...原创 2019-07-08 15:22:44 · 4398 阅读 · 0 评论