
C语言语法
写得很烂,设为私密不好查看,又不想让人看到,所以设为付费
入门->放弃
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数组占用flash的探讨
1. 如果使用全局/静态数组(变量), 可以不初始化或者初始为0, 这样就可以减少内存.2. 如果使用局部数组(变量), 可以不初始化的最好也别初始化, 尽量减少flash.原创 2024-04-12 23:12:00 · 382 阅读 · 0 评论 -
多态与代码屎山
通过这里让我想到了公司的产品: 我们公司的产品是监测水利数据的, 然后按一定格式上报给服务器. 虽然整体格式大体相同, 但是各个地方也有略微的差别. 我们公司的业务设计多个省份, 每个省份实现的都是通过if else格式实现的, 导致每新增一个省份业务, 就需要在需要判断地方添加if else.整个上报逻辑已经越来越多, 程序也越来越臃肿.程序熵增无法避免, 但是如果一个程序能够设计的合理, 熵增的速度也就会降低, 如果程序的熵增快速递增, 那么程序重构的命运会提前到来.原创 2024-02-25 08:08:32 · 438 阅读 · 0 评论 -
在windows环境下用vscode配置gcc编译代码
可以看看B站李慧芹老师的视频第70个视频,关于makefile的编写, 有那点基础够目前用的了.但是要注意优点不同: 要将rm换位del, 目前我还不会分目录, 但是基本够用了, 我们如果需要添加xxx.c, 则在这个makfile文件里面添加xxx.o即可。本来我之前很喜欢用visual stdudio写代码的, 这样在电脑上能够运行的代码,放到单片机上也是可以运行的.但是之前在使用linux中的list.h的时候, 在visual studio编译不过. 因此经过找网上的各种资源,最终整合了这篇文章。原创 2024-02-03 08:19:20 · 1131 阅读 · 0 评论 -
list.h
本代码是从linux的list.h中搬过来的.与普通的链表的区别在与他可以挂各种链表.他是以将struct list_head和其他成员组成一个全新的结点,注意这个写法在vs中是无法编译过的, keil和iar可以编译得过。原创 2024-01-27 20:24:08 · 455 阅读 · 0 评论 -
printf实现
这是我看之前公司的旧代码摘录下来的, 感觉写的还算可以吧,原创 2024-01-24 23:01:30 · 485 阅读 · 0 评论 -
const关键字
常量指针说的是不可以通过指针改变指向内容的值,但是可以重新指向新的地址, 因此一般用作函数参数,防止内部通过指针地址中保存的值void test(int const * val)。区别指针常量和常量指针,在*左边表示不能修改指向地址中的值,在*右边表示不能修改指向的地址。该方式是合法的,并且可以修改内容的值,如果外部改变值,可能会导致混乱,引入错误,慎用!如果指针常量作为函数参数,那么函数内部不能修改参数的指向,但是可以修改通过指针指向的值。不能改变指针指向,但是可以通过指针改变指向地址中的值。原创 2024-01-22 14:51:45 · 421 阅读 · 0 评论 -
自动初始化外设
看到了linux中的模块加载和卸载, 知道是通过attribute((sectiion))来实现的, 但是经过一顿研究, 发现如果想要在单片机中使用, 要自己写链接脚本. 我这种菜鸡也写不出来啊.黄天不负有心人, 最终找到一个简单的方法, 那就是通过__attribute__((constructor))注意这个是在启动的时候就会执行被修饰的函数, 因此用于硬件初始化是没问题的, 或者指挥在最开始调用的函数.原创 2024-01-01 01:17:16 · 429 阅读 · 0 评论 -
结构体中的字符串空间占用
从这里也可以看出即使我声明的char*,编译器也直接将字符串转换为了const char*,而实际上字符串就是const char*. 而const自然会被放到code区。而指针也仅仅占用四个字节,因此内存增加也仅仅是随着指针的。这个编译结果是51单片机工程用keil编译的结果,这个结果让我大吃一惊,我一直以为这个data会跟随字符串长度改变而改变。实际只是增加了一个指针的大小。而code区是增大了。看来还是我学艺不精啊,以前一直傻傻的把字符串声明到一个数组中,然后再将这个把这个数组写到结构体指针中。原创 2023-04-23 08:31:30 · 215 阅读 · 0 评论 -
数组排序算法
在轮询数组len-1遍,找到剩下的最大的数,将其放到倒数第二个位置,将倒数第二个数放到该位置。轮询数组一遍,找到最大的数,然后将其放到最后面,将最后一个数放到改数的位置。这种算法就是经典的冒泡算法,网上很多介绍的,就是轮询len-1次.依次轮询,知道轮询完成。原创 2023-03-26 00:50:52 · 99 阅读 · 0 评论 -
数组实现链表
再看《深入理解C指针》第一页的时候,就看到说可以用数组实现链表,这么牛逼,看来一下他的示意图,直接干。然后写完链表的插入,擦除,显示链表,回过神来一想,这不是脱裤子放屁吗。我数组都已经知道元素关系了,还在内部添加元素之间的关系(插入的时候)。我可以遍历数组,却还用链表的思路遍历(删除的时候)。本以为这种链表会像数组队列一样在单片机中大放异彩,但是思来想去似乎找不到应用场景。我就先做个记录吧,也许有一天能够用到。运行结果: 最后12没打印出来,实际是链表满了原创 2022-12-22 10:10:47 · 513 阅读 · 0 评论 -
文件操作中的巧妙操作
最近在调试板子的时候,需要用一个模块通过串口去升级GD32的程序。GD32里面的程序是别人写的,并且他们有个上位机,我需要做的就是按照他们的升级步骤以及数据格式通过串口发送数据给到GD32。(吐槽一下:要他们画个升级流程图也不画,给的demo程序反正也是运行不起来的,并且代码中也没注释,可能是故意的吧) 言归正传,他们的代码还是让我学到两个知识点: 1. 文件升级时读取文件 我之前的做法是,先获取文件大小,然后用malloc申请文件大小的内存,最后将原创 2022-12-05 09:54:20 · 126 阅读 · 0 评论 -
++a和a++的区别
#include <stdio.h>int main(){ int a = 3,c = 3, b = 0; b = a++; printf("%d\n",b);//b=3 b = ++c; printf("%d\n",b);//b=4 while(1); return 0;}b = a++ 拆开执行为: b = a; a = a +1;b=++a拆开执行为: a=a+1;...原创 2021-10-11 08:42:31 · 155 阅读 · 0 评论