C语言
pingxiaozhao
光看不练假把式!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
vscode关闭C/C++红色波浪线
1.打开vscode的设置选项(File -> Preferences -> Settings)2.在搜索栏输入 squiggle3.将出现的 Error Squiggles 选项改为 Disabled原创 2022-04-18 16:10:59 · 5195 阅读 · 2 评论 -
静态环形队列(C语言)
typedef struct //数据内容根据实际可以随意变更{ int a; int b; int c; char str[100];}DataDef#define BUFFER_LEN 20 //环形队列长度static int Read = 0; //读计数static in...原创 2022-01-03 18:19:26 · 732 阅读 · 0 评论 -
可变参数的宏定义
rintf()和fprintf()这些输出函数的参数是可变的,在调试程序时,你可能希望定义自己的参数可变的输出函数,那么可变参数宏会是一个选择。C99中规定宏可以像函数一样带有可变参数,比如 1 #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示参数可变,__VA_ARGS__在预处理中为实际的参数集所替换GCC中同时支持如下的形式 ...转载 2021-06-11 23:16:44 · 194 阅读 · 0 评论 -
C/C++语言 结构体中__packed 的作用
C/C++语言中struct结构体定义中__packed的作用,例如代码为:typedef struct __packed test_s{ int i; float f; double d; char c;}test_t;(1)__packed是字节对齐的意思,比如说int float double char它的总大小是4 + 4 + 8 + 1 = 17。(2)如果不用__packed,系统将以默认的方式对齐(32位系统是4字节),那么它占4原创 2021-03-06 09:40:57 · 12500 阅读 · 0 评论 -
C语言函数指针之回调函数
1 什么是回调函数?首先什么是“回调”呢?我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果过后再执行,则称之为异步回调。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。2 为转载 2020-10-23 17:31:51 · 328 阅读 · 0 评论 -
C语言结构体内存对齐
问题:求32bit环境下以下结构体所占的字节数typedefstructtest_struct{chara;shortb;charc;intd;chare;}test_struct;1、测试代码:#include<stdio.h>typedefstructtest_struct{chara;shortb;charc;intd;chare...转载 2020-10-23 16:33:46 · 265 阅读 · 0 评论 -
C语言、嵌入式中几个非常实用的宏技巧
宏打印函数在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。这时候我们可以使用宏定义来封装一个宏打印函数,这个宏打印函数可以显示打印信息所在的文件、行数、函数名等信息。如:#defineDBG_PRINTF(fmt,args...)\{\printf("<<File:%sLine:%dFunction...转载 2020-10-23 12:40:57 · 443 阅读 · 0 评论 -
ELF文件格式的详解
1.说明 2.elf文件的基本格式 3.elf文件的头部信息 4.elf文件的节区(Section) 4.1 节区的作用 4.2 节区的组成 5.elf文件的段(Segment) 6.用python解析elf文件 7.总结 1.说明ELF的英文全称是The Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Int..转载 2020-10-23 11:27:48 · 15742 阅读 · 1 评论 -
C嵌入式编程设计模式
C嵌入式编程设计模式1 嵌入式系统有何特殊之处 11 嵌入式设计的约束 12 嵌入式工具 13 OSRTOS还是没有操作系统 14 嵌入式中间件 15 与硬件协同开发 16 调试与测试 2 面向对象还是结构化 21 类 22 对象 23 多态和虚拟函数 24 子类化 25 有限状态机 3 小结...转载 2020-10-15 11:42:22 · 1296 阅读 · 0 评论 -
C/C++如何将一个数字三位三位加逗号
C语言版:#include<stdio.h>#include<string.h>#include<stdarg.h>void longToStr(long l,char* buf){ char str[20]; int len; int index; int offset=0; sprintf(str,"%d",l); //转为字符串 len = strlen(str); memset(buf,.原创 2020-07-23 11:26:00 · 4471 阅读 · 2 评论 -
C语言文件拷贝
原创 2020-07-21 18:30:21 · 189 阅读 · 0 评论 -
指针、数据类型 、const
从右往左读,遇到p就替换为“p 是一个”,遇到*就替换为“指向”1.const int p; 读法:p是一个常量整型2.const int* p; 读法:p是一个指向整型常量的指针3.int const* p; 读法:p是一个指向整型常量的指针4.int * cons...原创 2019-12-23 15:23:10 · 140 阅读 · 0 评论 -
两个float 类型数据比较大小
float类型不能比较相等或不等,但可以比较>,<,>=,<=用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用if(fabs(price-p)<0.000001)来代替if...转载 2019-12-11 14:47:46 · 4964 阅读 · 0 评论 -
sprintf 函数关于float类型转换四舍五入的问题
1.如果转换前的数据是小数点后三位有效小数,而转换要求小数点后保留2位有效小数,则结果会四舍五入,如下:fvalue = 999.999f;sprintf(str, "%0.2f", fvalue);输出结果:1000.001.如果转换前的数据和转换要求的数都是小数点后保留2位有效小数,则结果不会会四舍五入,如下:fvalue = 999.99f;sprintf(str, ...原创 2019-11-30 10:33:58 · 3301 阅读 · 0 评论 -
C/C++编程规范
标准GJB 8114-2013 《C/C++编程安全子集》原创 2019-11-20 17:57:36 · 2349 阅读 · 0 评论 -
嵌入式软件开发与测试流程
原创 2019-11-20 17:53:05 · 1470 阅读 · 0 评论 -
TCP的高并发服务器模型
【1】单客户端单进程,统一accept()原型介绍:此并发服务器模型并不预先分叉进程,而是主进程统一处理客户端的连接,当客户端的请求到达时,才临时fork()进程,由子进程处理客户端请求。利用socket()函数建立套接字,调用bind()函数绑定地址,调用listen()函数来监听队列长度,然后进入主处理过程,等待客户端连接的到来。当客户端连接到来时,服务器的accept()函数成功返回...转载 2019-11-04 13:40:41 · 1104 阅读 · 0 评论 -
可/不可重入函数
1.不可重入函数:函数的两次调用都可以对同一个变量修改,其修改的顺序不同会造成结果不同,最终导致达不到预期的结果。2.可重入函数:允许在函数执行期间再次调用该函数,不会产生异常结果的函数。总结:1.对于可重入函数,函数内部不能含有全局变量和static变量,因为这种变量可以被函数的多次重入调用共同控制,其最终的结果依赖于它们的执行顺序;2.可重入函数的定义中也不能使用mall...转载 2019-11-04 11:48:27 · 943 阅读 · 0 评论 -
linux 线程 条件变量
条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所(共享的数据)。主要应用函数:pthread_cond_init函数pthread_cond_destroy函数pthread_cond_wait函数pthread_cond_timedwait函数pthread_cond_signal函数pthread...转载 2019-11-04 11:35:10 · 150 阅读 · 0 评论 -
C语言中的强符号与弱符号
在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。对于它们,下列三条规则使用:① 同名的强符号只能有一个,否则编译器报"重复定义"错误。② 允许一个强符号和多个弱符号,但定义会选择强符号的。③ 当有多个弱符号相同时,链接器选择最先出现那个,也就是与链接顺序有关。————————————————版权声明:本文为优快云博主「astrot...转载 2019-11-01 18:01:33 · 224 阅读 · 0 评论 -
Linux系统编程—消息队列
1、消息队列简介消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。每种类型的消息都被对应的链表所维护:图1 位于内核空间的消息队列.png其中数字 1 表示类型为 1 的消息,数字2、3、4 类似。彩色块表示消息数据,它们被挂在对应类型的链表上。值得注意的是,刚刚说过没有消息类型为 ...转载 2019-11-01 17:31:22 · 252 阅读 · 0 评论 -
管道的读写规则以及原子性问题
1. 阻塞模式2. 非阻塞模式转载 2019-10-31 18:06:24 · 276 阅读 · 1 评论 -
嵌入式软件测试项目管理
1.项目建立2.测试需求分析与策划3.测试计划与实现4.测试执行5.回归测试6.测试总结7.交付与归档原创 2019-10-29 23:00:20 · 598 阅读 · 0 评论 -
嵌入式软件测试工具
CuttleITE:配置项/系统级白盒测试工具 Testbed:软件静态测试工具Klocwork:代码分析工具Kinterface:黑盒测试工具SQATest-TM:嵌入式软件测试过程管理工具ETest:嵌入式自动化测试工具书:嵌入式软件测试与实践 作者:赵国亮...原创 2019-10-28 23:25:33 · 3440 阅读 · 1 评论 -
列表实现数据增查改删
typedef struct PersonInfo{ int num; char name[30]; char ID[30];}PerInfo;typedef struct _PerInfoNode{ PerInfo data; struct _PerInfoNode *next;}PerInfoNode;void initDataFile(c...原创 2019-08-08 10:09:21 · 182 阅读 · 0 评论
分享