
C/C++
文章平均质量分 74
云雾海
杂七杂八地学,杂七杂八地写
展开
-
声明和定义
为什么我们需要进行声明和定义,它们有什么限制和规范?原创 2023-02-11 15:02:59 · 563 阅读 · 0 评论 -
【纯干货】深度底层剖析,你所不知道的printf
文章目录注意视频再观printf函数print为什么要加个f格式符是什么时候被解析的?如何实现变参函数来实现一个printf吧printf是否有检测功能printf只能输出在命令行吗结语注意本文为针对C语言的基础技术向,更适合刚入门需要进阶的同学技术进阶使用,当然我会尽量用简单的语言让哪怕是初学者也可以看得懂,核心知识有如下部分:变参函数的概念和使用__attribute__(())的概念和使用printf函数的实现视频本文可以结合视频一起食用,效果更佳:视频链接再观printf函数相原创 2021-08-19 21:02:23 · 2885 阅读 · 5 评论 -
C宏定义连接符#和##及其应用
在学习LwIP的时候,发现源码中出现了#define LWIP_MEMPOOL(name, num, size, desc) MEMP_##name这样的语句,了解到了C编译器中##这个连接符。顺便查了一下资料,还发现了#这个字符转换符。功能##可以作为宏定义中的变量替换,#则作为字符替换,一般他们都是用于带参宏定义中。比如:#define func1(a) printf(#a"\n")#define func(num, a) func##num(a)int main(){ func原创 2021-06-16 18:22:21 · 388 阅读 · 0 评论 -
C语言可以使用变量定义数组
这是在一次研讨会中发现的我知识上的纰漏,在此进行记录。当时想给学弟学妹讲一下关于动态内存的问题,在讲述时我用了一个初始化变量时不能用变量作为下标。例如:int i = 5;char test[i];然而事实上,在这样写了之后我发现编译没有出错,这和我最开始学C语言时老师给我们讲的内容并不相同。我最初怀疑时因为此时i已经被赋值了而后在此期间没有进行计算,所以编译器可能将其直接作为一个宏定义来解析了。但是我们又尝试了如下两种写法。int i = 5;i++;char test[i];int原创 2021-04-19 17:05:43 · 15707 阅读 · 10 评论 -
malloc的强制转换
因为数据结构课在使用malloc函数的时候一直很迷惑,为什么一定需要在前面加上一个强制转换语句,像是这样:int *a = (int *)malloc(sizeof(int)*3);。为此我在菜鸟教程的malloc()函数介绍中找到了关于malloc的声明:void *malloc(size_t size),显然加上一个强制转换语句并不是标准语法必须的东西,但是在菜鸟教程下面的举例中是按照强制转换的写法来写的,可惜没有说为什么。为此我尝试了不加强制转换语句的malloc来直接分配空间,在gcc编译后并没有原创 2020-12-26 18:14:00 · 4619 阅读 · 6 评论 -
C的main函数解析
终于开始学习Linux的C语言编程了嘤嘤嘤,有种终于入门的感动关于Linux中C语言编程包括vim、gcc、makefile这些工具的用法这些不是本次的主题,我在这里就不详细展开了,本文只阐述一下main函数的参数调用问题。工具VirtualBox 6.1.12,Ubuntu 20.04,Code::Blocks,C基本原理众所周知,main函数对于系统来说其实也只是一个普通的函数,它作为一个接口与系统进行连接,每次系统调用main函数生成的程序文件。而Linux系统其实又是通过C语言写出来的,本原创 2020-12-20 00:14:50 · 508 阅读 · 1 评论 -
通过报文对嵌入式进行编程举例
这是对我之前《如何假装用C语言为嵌入式写一个新语言》进行一个举例,以便更好地理解这种编程方式。目录报头(S)报尾(E)控制指令程序逻辑指令举例报头(S)报尾(E)报头和报尾ASCIIBUGUS42 55 47 55 53BUGUE42 55 47 55 45CODES43 4f 44 45 53CODEE43 4f 44 45 45VORCS56 4f 52 43 53VORCE56 4f 52 43 45CONSTS43 4f 4原创 2020-12-01 22:09:18 · 366 阅读 · 0 评论 -
如何假装用C语言为嵌入式写一个新语言
我们在使用无线嵌入式器件的时候,或多或少对于AT指令都有所了解——通过通信口发送一串字符,以AT开头,换行符结尾,中间插入指令内容,就可以实现对芯片寄存器的配置。这种指令式配置类似于蓝牙、WiFi等设备可能比较简单,但是如果我们打算用它去实现一个比较复杂的编程呢?是否也可以通过这种方式,是否可以在不使用编译器的情况下,通过指令调取内部程序并执行?我将会通过一个小demo进行测试这种编程方式的可行性。目录使用工具工作流程指令程序设计功能映射并单指令运行多指令运行上位机编程传递参数返回值思路解析参数返回值变量原创 2020-11-24 22:58:10 · 586 阅读 · 1 评论 -
C和C++在参数调用上的区别
在学习C语言的数据结构时,我发现教科书上出现的一些代码实际上并不能很好地在C语言环境中运行,而需要改成C++才可以,在网上搜了一下,这里记录C和C++在函数传参上的区别C++的形参有三种写法:void example_CPP(&a, *b, c){ /*a为引用传参*/ /*b为指针传参*/ /*c为直接传参*/}三种写法各有用处,这里我们以实例进行研究——首先我们打开自己的IDE,我用的CodeBlocks,然后输入一下程序:#include <iostream>原创 2020-11-08 17:10:52 · 309 阅读 · 1 评论