
C语言
文章平均质量分 50
C语言知识点
Frank Castle
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C语言】环形缓冲区ringbuffer
环形缓冲区原创 2025-08-07 20:48:59 · 212 阅读 · 0 评论 -
【698协议】帧校验算法
【698协议】帧校验算法原创 2024-05-26 16:44:02 · 702 阅读 · 0 评论 -
【c/c++】c和cpp混合编译
在这段代码中,#ifdef __cplusplus 和 #endif 之间的代码是为了在 C++ 中使用 C 语言的函数声明和定义时,确保编译器正确地处理 C 和 C++ 之间的语法差异。这是因为 C 和 C++ 有一些不同之处,包括函数名的重载、类型转换等。在这段代码中,extern “C” 是一个 C++ 的特性,它告诉编译器要按照 C 的方式来处理其中的函数。:这个条件编译指令检查是否正在编译 C++ 代码。__cplusplus 是一个宏,当编译器编译 C++ 代码时,它会被定义。原创 2023-09-01 18:58:41 · 3603 阅读 · 1 评论 -
【c语言】snprintf和strncpy
snprintf是C语言中用于格式化字符串输出的函数,用于将格式化的数据写入一个字符串缓冲区。与printf不同,snprintf允许您指定输出的最大长度,以避免缓冲区溢出。如果传递给snprintf的第二个参数小于等于输出的字符数(包括结尾的null字符\0),snprintf会确保输出的内容不会超出指定的长度,并在缓冲区的末尾添加一个null字符来终止字符串。这样可以防止缓冲区溢出,并确保输出的字符串始终是以null字符结尾的合法字符串。原创 2023-08-14 18:27:51 · 1169 阅读 · 0 评论 -
【设计模式】 策略模式
(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让客户端代码和算法的具体实现解耦。这样,客户端可以根据不同的需求选择不同的算法,而无需修改原有的代码。原创 2023-07-30 12:24:43 · 840 阅读 · 0 评论 -
【设计模式】简单工厂模式
工厂模式是一种灵活且可扩展的设计模式,它通过封装对象的创建过程,帮助我们降低代码的耦合度,并支持系统的扩展和维护。然而,工厂模式也有一些局限性,例如增加了类的数量和抽象性,可能会增加代码的复杂性和理解难度。:如果需要添加新类型的产品(图形),只需要添加一个新的产品类和对应的工厂方法即可,不需要修改现有代码,符合开闭原则。:客户端只需与抽象产品和抽象工厂进行交互,不关心具体的产品类和工厂类,隐藏了产品对象的具体实现。:每个具体产品都需要一个对应的具体工厂类,如果产品较多,会增加类的数量,增加系统复杂性。原创 2023-07-30 10:37:17 · 711 阅读 · 0 评论 -
freeRTOS-------任务间同步
在嵌入式系统或RTOS中,任务间的同步是一个常见且重要的需求。二值信号量提供了一种简单而有效的方式来实现这种同步。通过使用xSemaphoreTake()和xSemaphoreGive()函数,我们可以方便地实现任务的阻塞和唤醒,保证任务按照我们预期的顺序执行,从而避免潜在的竞态条件和逻辑错误。务必在使用信号量时小心避免死锁和其他同步问题,合理规划任务的优先级和同步机制,确保系统稳定可靠地运行。原创 2023-07-20 23:40:58 · 1205 阅读 · 0 评论 -
C语言-------i++和++i的区别
i++和++i的区别原创 2023-04-30 19:33:16 · 3207 阅读 · 1 评论 -
替换字符串中出现的某段字符串的C语言和C++实现方式
字符串替换原创 2023-04-28 22:56:10 · 777 阅读 · 0 评论 -
C语言-------Linux下检测某个文件是否存在
linux下检测某个文件是否存在原创 2023-03-27 18:21:17 · 3106 阅读 · 0 评论 -
C语言-------宏#define
预处理时发生的宏展开。原创 2022-11-11 19:33:24 · 377 阅读 · 0 评论 -
C语言-------简单代码风格.clang-format配置文件
【代码】C语言-------简单代码风格.clang-format配置文件。原创 2022-10-21 13:55:16 · 711 阅读 · 0 评论 -
clang-tidy
clang-tidy 使用翻译 2022-10-16 15:53:02 · 5265 阅读 · 0 评论 -
C语言-------数组越界的问题
问题:定义一个数组array[5],那么数组包含了array[0],array[1],array[2],array[3],array[4],那array[5],array[6]…会是什么呢?很多书里面都会说array[5]会出现下标越界的错误,没错这确实是越界了,但实际上编译器并不会给你报错。下面来看一段代码#include <stdio.h>void showArray(int *array, int arrayLenth){ for (int i = 0; i < ar原创 2022-03-08 00:47:59 · 1268 阅读 · 1 评论 -
解析URL, 从中解出来host, path
来源:https://help.aliyun.com/document_detail/163755.html阿里云物联网平台,C Link SDK中的aiot_ota_api.c/* 解析URL, 从中解出来host, path */static int32_t _download_parse_url(const char *url, char *host, uint32_t max_host_len, char *path, ui原创 2022-02-24 21:31:03 · 5901 阅读 · 0 评论 -
C语言-------结构体定义时赋值的三种方式
#include <stdio.h>struct Time{ int hour; int min; int sec;};//必须按照结构体顺序struct Time t1={ 17, 49, 54};//与结构体顺序无关struct Time t2={ .min=49, .sec=54, .hour=17};//与结构体顺序无关struct Time t3={ min:49, sec:54, hour:17};int main(){ p原创 2022-02-16 17:59:35 · 6328 阅读 · 0 评论 -
C语言-------assert()断言函数
void assert (int expression);断言函数(本质是宏函数),用于在调试过程中捕捉程序的错误。assert(expression) 会对表达式expression进行检测:如果expression的结果为 0(条件不成立),那么断言失败,表明程序出错, assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行如果expression的结果为非 0(条件成立),那么断言成功,表明程序正确, assert() 不进行任何操作原创 2021-12-01 14:34:21 · 1440 阅读 · 0 评论 -
16位,32位,64位机器数据类型所占比特位数
类型16位机器32位机器64位机器char888short161616int163232long323264longlong646464float163232double646464原创 2021-10-23 13:20:48 · 729 阅读 · 0 评论 -
C语言------优先级问题
图源:《C专家编程》原创 2020-11-11 17:01:36 · 131 阅读 · 0 评论 -
负数&补码&存储
小贴士1:低于int类型(即规定的寄存器大小)的基础类型需要在运算过程中转化为int类型(寄存器的位数)的大小进行计算,然后在运算完成以后再截取成原大小进行结果的表示小贴士2:%d输出的是原码有符号变量类型内存最高位为1时,是负数,当成补码,%d输出时要转换成原码(符号位不变,补码取反+1)。1.已知unsigned char a=250;int b = 250;则计算:b = (~a) <<2; 后,a= ,b =代码:void test1(){ unsigned c原创 2020-10-30 14:56:23 · 1063 阅读 · 0 评论 -
C语言---------*(*(a+1)+2)&二维数组
看访问方式(*或者[])有几层0层 行首地址1层 元素地址2层 元素原创 2020-09-19 19:42:42 · 1908 阅读 · 2 评论 -
堆&栈&进程内存空间分配方式&static
堆&栈&进程内存空间栈堆进程的内存空间栈大小Linux: 10M = 10240KBwindows: 1M = 1024KB可以静态分配(在编译阶段就能确定大小,由编译器进行分配);也可以动态分配(使用alloca()函数可以动态分配栈的内存空间,释放的时候由编译器自己释放,不需要手动释放)堆不能静态分配,只能动态分配(堆的申请是在执行过程中执行的)堆是使用malloc()、calloc()、realloc()等函数动态分配的在堆上频繁的调用new/d原创 2020-05-27 15:57:09 · 907 阅读 · 0 评论 -
C语言-------二维链表&位运算
二维链表结构定义typedef struct music_node{ char *music_name; struct music_node *next; }MNODE;typedef struct Gnode{ char *name; int music_num; MNODE *head; MNODE *rear; //...原创 2020-04-19 01:13:21 · 541 阅读 · 0 评论 -
C语言-------文件
文件的读写字符读写函数 :fgetc 和 fputc字符串读写函数:fgets 和 fputs数据块读写函数:freed 和 fwrite格式化读写函数:fscanf 和 fprinf原创 2020-04-12 22:38:02 · 229 阅读 · 0 评论 -
C语言-------链表
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{ char name[20]; int date; struct node *next;}NODE;NODE *CreatList_headnode(){ NODE *head = (NO...原创 2020-04-11 21:53:24 · 121 阅读 · 0 评论 -
C语言部分函数知识点&感悟
1. 模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块 要求:各模块相对独立、功能单一(一个函数完成一个任务)、结构清晰、接口简单 设计思路:将所要实现的目标分解成一个个功能单一的小模块(先不管小模块的实现)用流程图把小模块连起来,写出主函数结构框架(还是不管模块函数的实现,可以用假设已经实现的模块函数;模块函数的取名最好是英文,且一看就可知道函数的作用;确定函数的输入参...原创 2020-03-15 23:25:19 · 577 阅读 · 0 评论 -
C语言-------数组&指针&地址&内存
指针是地址,指针变量是存放地址的变量;5.地址[n] == *(地址+n)void p 可以指向任何类型元素,p不能用解引用符,p不能做运算,使用时要进行强制类型转换.*p++ *和++优先级一样,自右边向左运算...原创 2020-03-22 00:02:57 · 467 阅读 · 0 评论 -
C语言-------函数指针&实参形参的传递&**p
int (*p)();//p为指向函数的指针,该函数返回一个整型值先确定函数返回值,再写两个括号.例:#include <stdio.h>int sum(int a,int b);int main(void){ int (* pfun)(int ,int); pfun=sum;//将sum的入口地址赋给pfun; //下面的写法都是对的 printf("...原创 2020-03-23 00:03:52 · 2361 阅读 · 0 评论 -
C语言-------Linux编译&GDB调试&Makefile&结构体大小计算
makefileTARGET = app SOURCES = $(wildcard *.c)OBJS = $(patsubst %.c, %.o, $(SOURCES) )CC = gcc CFLAGS = -Wall -g -c -D__DEBUGLIBS = -lm -lpthreadINCLUDES = -I./include$(TARGET):$(OBJS) $(...原创 2020-03-29 21:25:06 · 832 阅读 · 0 评论