
C&C++
记录分享C/C++的学习心得
记录分享代码优化、性能优化
赖small强
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】优秀的C++编码风格推荐
最近在进行Android下的系统蓝牙开发时, 发现了Google开源的一个C++ 编码规范.分享: Google C++ Style Guide原创 2021-11-03 17:09:19 · 614 阅读 · 0 评论 -
【C】C语言实现allocator(内存分配器)
目标2021-1112前 输出原创 2021-11-03 17:06:11 · 573 阅读 · 0 评论 -
【C】ringbuffer的C语言实现
最近在学习Android 下的Bluedroid时, 看到在Bluedroid中实现了ringbuffer这一数据结构, 比较简洁, 所以独立出来进行分享.Bluedorid官方源码路径本文分享的ringbuffer例子源码路径什么是ringbuffer?上述图片是来自Amazon AVS C++ SDK中的图片. Shared Memory Ring Buffer.如上图所示, ringbuffer 实质上就是一个连续内存/首位相连的一个环形缓冲区. 这里数据结构在音频数据的存储上比较常用到.原创 2021-11-03 16:59:44 · 1697 阅读 · 2 评论 -
【C & C++】C++中class关键字和struct关键字存在区别?
在C++开发中其实我们可以使用struct关键字定义类,也可以使用class.唯一区别是, struct 和 class的默认访问权限不太一样.对于C++的类,我们可以在第一个访问说明符之前定义成员,对于这种成员的访问权限依赖于类定义的方式.如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public;与之相反,如果我们使用class关键字,则这些成员是private,示例代码如下使用class定义类test#include <iostream>class t原创 2021-07-07 22:33:59 · 243 阅读 · 2 评论 -
【C & C++】C++符号修饰符
linux 下提供命令: c++filt修饰后名称程序员的自我修养 p87.未完待续!!!原创 2021-07-07 21:36:00 · 190 阅读 · 0 评论 -
【C & C++】Linux下如何快速确认你的交叉编译是否支持某种C++标准
在这里以gcc-arm-none-eabi-5_4-2016q3这一Linux下的交叉编译器为例子:只需要在-std参数后加上需要确认的C++版本.这里以C++11为例子,arm-none-eabi-gcc -std=c++11arm-none-eabi-gcc: fatal error: no input filescompilation terminated.而当将c++11 修改为c++20时会报如下信息,arm-none-eabi-gcc -std=c++20arm-none-ea原创 2021-07-01 15:09:57 · 960 阅读 · 0 评论 -
【C & C++】malloc和free是如何配合?
malloc指定大小的空间后,调用free但不包含大小,那free函数怎么知道需要释放多少内存呢?这背后的原理是?cookie?未完待续!!原创 2021-06-30 22:39:32 · 216 阅读 · 2 评论 -
【C&C++】C语言memccpy的使用
在基于C语言开发时,容易将memccpy和memcpy弄混, memccpy的函数原型:void *memccpy(void * restrict dest, const void * restrict src, int c, size_t count);参数说明,dest - pointer to the object to copy tosrc - pointer to the object to copy fromc - terminating character, conver原创 2021-06-24 11:41:56 · 2320 阅读 · 0 评论 -
【C/C++】Linux下自定义C++的启动代码
gcc -e (function name)未完待续!!原创 2021-06-23 23:45:48 · 302 阅读 · 2 评论 -
【C&C++】C++ String类的重写
拷贝构造拷贝赋值移动构造移动赋值未完待续!!!原创 2021-06-21 23:25:58 · 221 阅读 · 2 评论 -
【C&C++】Linux 64位系统下C指针操作的经验杂谈
背景最近注意在进行Linux下开发时,由于对于64位系统下的指针理解基础不扎实,导致代码在64位系统下运行出现crash情况.64位系统下,C语言的指针类型的长度为8byte,而32位系统是4byte.代码示例调试方法未完待续!!!...原创 2021-06-19 10:54:13 · 476 阅读 · 0 评论 -
【C&C++】C++11 =default, =delete
背景知识补充但定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通常通过定义5种特殊的成员函数来控制这些操作,包括:拷贝构造函数、拷贝赋值运算符(实质也是函数)、移动构造函数和析构函数. 在C++中我们称这些操作为拷贝控制操作.如果我们没有显示地定义以上某一个特殊函数,则编译器会为我们自动定义一个,另外还有一个特殊的函数: 默认构造函数,在开发者未定义的情况下,编译器会自动一个.C++11, =default通过将拷贝控制成员函数定义为=default 来显示原创 2021-06-17 00:23:23 · 146 阅读 · 0 评论 -
【C&C++】深入理解C语言可变参数
libc/gcc源码级 理解#define va_start(v,l) __builtin_va_start(v,l)#define va_end(v) __builtin_va_end(v)#define va_arg(v,l) __builtin_va_arg(v,l)原创 2021-06-11 14:33:24 · 174 阅读 · 0 评论 -
【C&C++】C++深入学习理解课程推荐
在这里强烈推荐侯捷老师的C++系列课程.课程路径: 侯捷老师的C++系列课程系列课程涉及到的内容,<C++面向对象开发><C++大系: C++ 内存管理机制><C++大系: STL STL标准库与泛型编程><C++大系: C++新标准C++11/14>另外可以在B站试看后,购买正版视频.B站相关视频链接...原创 2021-06-09 13:27:38 · 555 阅读 · 0 评论 -
【C&C++】类成员指针
背景最近在进行C++开发时,发现自己对于普通的变量指针、函数指针与类的成员指针的理解出现了偏差和混乱,所以在这边文章中引用了<C++ Primer>书籍中的片段结合示例进行C++类成员指针的讲解,包含以下两点,类数据成员指针类成员函数指针成员指针成员指针(point to member)是指可以指向类的非静态成员的指针。一般情况下,指针指向一个对象,但是成员指针指示的是类的成员而非类的对象。类的静态成员不属于任何对象,因此无需特殊的执行静态成员的指针,指向静态成员的指针与普通指针没原创 2021-06-09 09:11:33 · 927 阅读 · 0 评论 -
【C&C++】C++类的前置声明
未完待续!!原创 2021-06-07 20:38:44 · 110 阅读 · 0 评论 -
【C&C++】C++中new一个对象数组,为什么需要搭配delete[]
需要已图示的方式 说明清楚背后的原理new String[3]delete[]原创 2021-06-06 12:38:18 · 1033 阅读 · 1 评论 -
【C&C++】C++类成员函数取地址以及类非静态成员函数和静态成员函数的区别
前言相对于C语言,C++在类的设计中存在两点特殊设计:成员函数重载非static的成员函数,编译器在编译该成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this.而本文中,与第二点特性相关.在类中,static不仅可以进行静态成员变量的声明,还可以进行静态成员函数的声明。普通成员函数可以访问所以成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不原创 2021-06-04 20:00:46 · 2324 阅读 · 1 评论 -
【C&C++】C/C++代码如何写规范注释
基于doxygen要求的注释规则进行制定C/C++的注释规则.https://www.doxygen.nl/manual/docblocks.html本文已Amazon AVS C++ SDK D-Bus client实现中的DBusConnection.h的注释为例子.另外通过Doxygen这一工具记性API reference 文档的生成, 如何利用Doxygen自动生成API Reference说明文档/* * Copyright Amazon.com, Inc. or its affili原创 2021-06-02 17:52:10 · 113 阅读 · 0 评论 -
【C&C++】Doxygen - C++项目的文档生成工具
https://github.com/doxygen/doxygen原创 2021-06-01 13:30:24 · 1344 阅读 · 0 评论 -
【C&C++】STL之容器初探
主要讲述C++ STL中的容器分类原创 2021-06-01 07:19:11 · 111 阅读 · 0 评论 -
【C & C++】C++虚函数,虚指针,虚表 初探
背景知识在C++语言中,基类将类型相关的函数与派生类类不会做改变直接继承的函数区别对待。对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数。什么是虚函数虚函数,又有虚函数和纯虚函数,虚函数,用于定义类型特定行为的成员函数。通过引用或者指针对虚函数的调用直到运行时才被解析,依据是引用或者指针所绑定的对象用于当你希望派生类重新定义该函数,而且对该函数已有默认的定义.纯虚函数,在类的内部声明虚函数时,在分号之前使用看=0。一个纯虚函数不需要(但是可以)被定义。原创 2021-05-30 18:02:14 · 162 阅读 · 1 评论 -
【C & C++】学习网站推荐
朋友推荐的链接https://cpp.hotexamples.com/ 用于搜索C++/Python等主流语言的相关的接口的示例代码.原创 2021-05-27 20:11:02 · 411 阅读 · 0 评论 -
【C & C++】C++堆栈与内存管理
本文主要是对C++中中的new和delete做进一步的剖析,从而能更好的理解C++堆栈的内存管理.先上例子new、delete的实际使用Demo演示非class的变量类型,#include<iostream>int main(int argc, char **qrgv){ int *value = new int[4]; value[0] = 5; std::cout << "value[0]: "<< value[0] <&l原创 2021-05-27 08:17:47 · 156 阅读 · 0 评论 -
【AVS C++ SDK】Logger源码分析- C++多态
背景本文的源码来自于Amazon的AVS C++ SDK,AVS C++ SDK 源码链接本文具体分析文件的路径:文件名称文件路径Logger.h/ConsoleLogger.havs-device-sdk/AVSCommon/Utils/include/AVSCommon/Utils/LoggerLogger.cpp/ConsoleLogger.cAVSCommon/Utils/src/Logger本文只是针对多态这一C++特性在这里的应用,对于其它内容的代原创 2021-05-25 16:06:48 · 291 阅读 · 0 评论 -
【C & C++】g++编译错误 记录
#include <sstream>#include <iostream>#include <iomanip>#include <atomic>static std::atomic<int> g_nextThreadMoniker(4);int mian(int argc, char **argv){ std::ostringstream stream; stream << std::setw(3) &l原创 2021-05-22 00:18:36 · 394 阅读 · 0 评论 -
【C & C++】C++ Input/Output Stream Library分享
istreamiostreamfstreamsstream原创 2021-05-21 23:09:34 · 164 阅读 · 0 评论 -
【C & C++】C调用C++
Pending!!!原创 2021-05-11 17:14:45 · 120 阅读 · 0 评论 -
【C&C++】C/C++ 实现对于Python的调用 进阶
背景之前的一篇文章 C/C++ 实现对于Python的调用中讲解在C/C++中如何调用Python Module中的函数. 而本文的重点是讲解 如何将C函数作为回调函数通过在C中调用Python函数进行回调函数的注册.官方资料在C/C++中如何解析Python的回调函数参数Python/C API Reference Manual ,调用Python/C API进行Python 和 C的类型转换.C和Python的数据类型转换longPyObject* PyLong_FromLong(lo原创 2021-05-11 17:08:00 · 208 阅读 · 0 评论 -
【C&C++】C程序内存布局
对于C语言的学习、掌握,内存的理解是一定绕不开的,本文主要是基于实际的小例子来简单讲解下C程序的内存分布通常一个C程序主要由以下几个部分构成,代码段(Text segment or Code segment)已初始化数据段(Initialized data segment )未初始化数据段也常称为"bss"段(Uninitialized data segment )栈(Stack)堆(Heap)一探究竟名词解释代码段( Code segment )代码段主要存储的是可执行程.原创 2021-05-05 23:50:11 · 435 阅读 · 1 评论 -
【C&C++】C/C++ 实现对于Python的调用
BluezBLEC调用Python原创 2021-04-26 21:46:59 · 163 阅读 · 0 评论 -
【C&C++】C语言函数中的结构体指针变量传递
结构体结构体指针变量函数形参值传递二级指针原创 2021-04-25 09:31:14 · 3383 阅读 · 0 评论 -
【C & C++】静态库和动态库
在嵌入式开发中,"库"是我们非常熟悉的一次词,在针对Linux这边目标平台进行开发时,静态库和动态库都会涉及到。而对目标平台为RTOS这类小系统时,常用到的静态库的方式基本概念,什么是库?静态库静态库和动态库是不同的,静态库是不涉及到符号重定位之类的问题。静态库本质上只是将一堆目标文件进行打包.静态库的代码在编译过程中已经被载入可执行程序中,因此最终生成的可执行程序体积相对较大些.静态库命名规则,lib开头, .a 为后缀, 例如sayhello静态库 -> libsayhello.a.原创 2021-04-16 16:26:44 · 433 阅读 · 0 评论 -
【C&C++】- 如何合理减少if else 语句
代码优化!使用if else,有时间看起来会比较复杂,但这个可以通过在小块中进行编写代码来解决, 条件语句的使用增加了代码的可阅读性. 然而**优先处理错误的情况是一条最佳实践** ,可以简化if else的逻辑原创 2021-04-12 10:38:40 · 1495 阅读 · 0 评论 -
算法&数据结构基础 - 数组和链表
什么是数组?什么是链表?数组和链表的本质区别?* 数组的内存是连续的,支持下标随机访问* 链表的地址不是连续的* 链表适合插入、删除操作原创 2021-04-10 19:36:25 · 193 阅读 · 0 评论 -
C语言学习入们到精通之学习笔记(二)
1、c语言结构的剖析 1.1、文件后缀格式 源码: .c 标准c源码 .cpp或c++ c++源码 头文件: .h 标准c头文件 .hpp或.h c++的头文件 汇编: .s 机器码 .o原创 2016-05-29 16:31:45 · 1231 阅读 · 0 评论 -
C语言学习入门到精通之gcc编译与调试
在linux系统下进行C语言开发的学习 在linux系统下,C语言的编译是由gcc编译器(即释译工具)完成的 arm-linux-gcc 是arm的编译器即编译的是运行在arm开发板上的程序 arm-android-gcc 是android的编译器 参数: -o 指定生成的目标 -E 预处理 即把原创 2016-05-30 12:36:15 · 737 阅读 · 0 评论 -
C语言学习入门到精通之学习笔记(三)
基本数据类型 常量:运行过程中数据不可变 变量:运行过程中数据可被改变 标识符:如类型名、变量名、函数名 1、整型 long 4字节 范围:无符号 0-2的32次方-1 有符号 -2的31次方 - 2的31次方-1 short 2字节原创 2016-06-01 12:21:08 · 1847 阅读 · 0 评论 -
C语言学习入们到精通之学习笔记(四)
C语言中的类型转换 在表达式中常遇到类型的转换,包含自动类型转换与强制类型转换,在C语言开发过程中,很多的开发人员往往会忽略数据类型的自动转换(即隐藏的),造成表达式在逻辑并看不出什么错误,而表达式的结果确怎么弄都不对,不仅耽误项目开发进度而且编写的代码bug太多,所以在我们的开发过程中一定要数据类型的自动转换加以注意。一、自动转换规则在表达式中,以高级别为准来自动转换char sh原创 2016-06-03 19:57:46 · 840 阅读 · 0 评论 -
C语言学习入们到精通之学习笔记(一)
为什么我通过博客的形式与大家分享我的学习笔记 对于c语言的学习已经有快3年之久了,对于学习嵌入式的我看来,C是我们的根本也就是我们的核心知识点,想学习好嵌入式就必须精通C语言。在一年之前我对C语言的认识只停留在表面,只会用C语言写写51单片机或STM32的控制代码,就知道用if、while走天下,碰到结构体、数组就懵逼,特别是对字符串的认识太片面了,这些内容在我接下的博客系列中都会一一讲原创 2016-05-29 14:39:24 · 6953 阅读 · 0 评论