随笔分类 -  Linux C开发学习

自己走过的坑要记下来 下次入坑尽快爬出来 新人入坑拽一把
摘要:7. 控制语句 if 语句 不推荐用else,虽然符合业务逻辑,但是不够直观,需要将前面 N 个条件判断看懂,才能明白何种条件下才能进入else语句块中。 因此,下面代码中最好用 else if (data % 3 == 2) int data = 0; cout << "请输入一个int数值:"; 阅读全文
posted @ 2024-01-05 13:26 Qing-Huan 阅读(20) 评论(0) 推荐(0) 编辑
摘要:1. 数据类型 重点 return 先返回函数结果,后结束当前函数 返回函数结果:返回值放在eax寄存器中,然后ret返回 功能不同的代码之间要空行 一份代码注释风格不要多样化 /**/ 块注释不能嵌套 long long 是C99里面定义的 extern int data; 编译器理解为:该变量是 阅读全文
posted @ 2024-01-05 13:08 Qing-Huan 阅读(46) 评论(0) 推荐(0) 编辑
摘要:最近玩STM32,里面有个关键字 `__weak`,当我们重定义了用`__weak`修饰的函数时,运行过程中会调用我们重定义的函数。 ![image](https://img2023.cnblogs.com/blog/1499308/202306/1499308-20230608081427062- 阅读全文
posted @ 2023-06-08 08:24 Qing-Huan 阅读(681) 评论(0) 推荐(0) 编辑
摘要:问题来源 查找系统调用open函数,发现存在同名函数,可是C语言没有函数重载的概念。 代码层面分析 从代码中跳转到open函数声明,看到了变参函数,这样就符合C语言的语法规则了。 可变参数 参数需要具备一定特征 第一个参数为参数总个数 第N个参数为NULL或其他具有代表性的值 参数从右向左入栈,然后 阅读全文
posted @ 2023-04-17 19:56 Qing-Huan 阅读(46) 评论(0) 推荐(0) 编辑
摘要:1. 在调用成员函数前,先将对象地址存入 ecx 寄存器,进入函数后将 ecx 压栈保存对象地址,当需要用到 this指针 时,再弹栈取出赋值给函数内部自带的一个 this指针 2. 数据成员是由 this指针 +偏移取到的。类的对齐规则和结构体一致 3. 静态成员函数没有 this指针 4. 若函 阅读全文
posted @ 2023-04-17 08:51 Qing-Huan 阅读(34) 评论(0) 推荐(0) 编辑
摘要:0. 原理简述 父类中如果存在虚函数,类中会隐含一个虚函数指针,指向一个虚函数表,表中存储了父类的所有虚函数入口地址。子类继承父类,会复制一份虚指针和虚表。此时如果子类重写了父类的虚函数,会将重写的虚函数入口地址更新到虚表中。若父类指针指向了子类,并且调用虚函数,会在我们更新的虚表里找虚函数入口地址 阅读全文
posted @ 2023-04-14 21:42 Qing-Huan 阅读(77) 评论(0) 推荐(0) 编辑
摘要:0. 思考 单向链表有序插入,插入点分为这样几个地方: 当前链表为空,被插入节点是第一个节点 被插入节点作为头结点 被插入节点在中间 被插入节点在尾部 那么按照这样的步骤一步步的去实现,需要两个指针,后指针作为比较节点,前指针仅是为了记录位置,便于链表节点在中、尾两处插入。 1. 单指针记录遍历 如 阅读全文
posted @ 2023-03-22 21:35 Qing-Huan 阅读(43) 评论(0) 推荐(0) 编辑
摘要:直接上代码 若代码有可优化或某处不合理,欢迎指正,不胜感激。 #include <stdio.h> #include <stdlib.h> #include <string.h> int compare_double(void* dst_addr, void* src_addr) { return 阅读全文
posted @ 2023-03-19 09:35 Qing-Huan 阅读(17) 评论(0) 推荐(0) 编辑
摘要:以下观点仅代表个人想法,不是标准 C语言中有三种循环控制语句(goto不作考虑),那么这三个语句除了语法不同外,是否还有其他区别呢? 像if语句和switch...case语句之间,除了语法不同外,switch...case对特殊的case值进行了跳转表优化,以空间换时间。 对于较为“古老”的机器, 阅读全文
posted @ 2023-03-19 09:22 Qing-Huan 阅读(56) 评论(0) 推荐(0) 编辑
摘要:&& 短路特性 遇到假即为假,不会判断下一组表达式 || 短路特性 遇到真即为真,不会判断下一组表达式 阅读全文
posted @ 2023-03-19 09:03 Qing-Huan 阅读(53) 评论(0) 推荐(0) 编辑
摘要:0. 本文结构概述 二维数组在内存中是线性存储 二维数组排序(C语言代码) 1. 二维数组在内存中是线性存储 2. 二维数组排序(C语言代码) #include <stdio.h> int main(int argc, char* argv[]) { int arr[3][4] = {34,15,3 阅读全文
posted @ 2023-03-19 08:58 Qing-Huan 阅读(186) 评论(0) 推荐(0) 编辑
摘要:0. 本文结构概述 switch...case语法格式 C和C++的switch不同点 switch...case反汇编 switch...case跳转表 case值间距过大不用跳转表 1. switch...case语句 switch (表达式1) // 表达式结果不能是实型、字符串 { case 阅读全文
posted @ 2023-03-19 08:46 Qing-Huan 阅读(749) 评论(0) 推荐(0) 编辑
摘要:前言 技术背景:能够使用信号量进行C语言编程使用 遇到问题:python的信号量阻塞导致线程无法接收kill的终止信号(SIGTERM) 步骤 将遇到的问题写成一个demo.py 用C语言将其复现一遍,对比其与python中的信号量不同之处,并进行多种测试 根据测试结果,带着问题查找资料,并进行总结 阅读全文
posted @ 2023-03-18 20:54 Qing-Huan 阅读(9) 评论(0) 推荐(0) 编辑
摘要:0. 本文结构概述 若函数无返回值,默认为int类型 返回值小于4B,存入寄存器EAX中 返回值大于4B小于8B,存入寄存器EAX和EDX中 返回值大于8B放入栈区的临时空间 1. 若函数无返回值,默认为int类型 2. 返回值小于4B,存入寄存器EAX中 3. 返回值大于4B小于8B,存入寄存器E 阅读全文
posted @ 2023-03-18 20:28 Qing-Huan 阅读(112) 评论(0) 推荐(0) 编辑
摘要:## 4字节对齐的实质 之前有想过为什么C语言的字符串库函数,几乎都要处理这种4字节对齐问题,查找资料后,认为原因是: 1. 若非对齐访问,需要读取两次,CPU做数据重组,导致软件运行效率低。 在看操作系统的硬件原子操作时,发现若对齐有误或不规范,会有以下两种问题发生: 2. 通过结构体跨主机通信时 阅读全文
posted @ 2023-03-18 18:03 Qing-Huan 阅读(227) 评论(0) 推荐(0) 编辑
摘要:参考文档如下: https://www.cnblogs.com/dingyunfeng/p/12735512.html https://developer.aliyun.com/article/378327 C接口文档:https://libvirt.org/html/libvirt-libvirt 阅读全文
posted @ 2022-11-01 09:47 Qing-Huan 阅读(324) 评论(0) 推荐(0) 编辑
摘要:总结 由int num = '1234';是否能编译、输出结果问题,引发了一系列的问题。 按照以往的知识储备,我认为字符类型变量赋值给int整型变量,这是字符类型强转为int类型。那么强转的概念又是什么呢? 百度词条给出这样的定义: 基本数据类型有:1.整型:byte,short,int,long 阅读全文
posted @ 2022-10-24 17:51 Qing-Huan 阅读(102) 评论(0) 推荐(0) 编辑
摘要:开发环境:VS2019(Debug x86) 功能:获取当前线程内ebp与函数返回值 结果: 代码示例: 1 #include <iostream> 2 #include <list> 3 using namespace std; 4 5 typedef struct 6 { 7 void* pre 阅读全文
posted @ 2021-10-08 09:43 Qing-Huan 阅读(124) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示