3)头文件的语义相关性原则:同一头文件中出现的类型定义、函数声明应该是语义相关的、有内部逻辑关系的,避免将无关的定义和声明放在一个头文件中。...同时,源文件同名头文件置于包含列表前端便于检查该头文件是否自完备,以及类型或函数声明是否与标准库冲突。 2)减少头文件的嵌套和交叉引用,头文件仅包含其真正需要显式包含的头文件。...在不会引起歧义的前提下,头文件内尽可能使用VOID指针代替非基本类型的值变量或指针,以避免再包含类型定义所在的头文件。但这将影响代码可读性并降低程序执行效率,应权衡利弊。...9)正式版本和测试版本使用统一文件,使用宏控制是否产生测试输出。 10)必要的注释不可缺少。...通常在某个相关的源文件中定义,然后在头文件中进行外部声明。需要使用时包含相应的头文件即可。定义变量的源文件也应包含该头文件,以便编译器检查定义和声明的一致性。
EASTL: EA-STL公共部分。 ETL: 嵌入式模板库。 ffead-cpp: 企业应用程序开发框架。 Folly: 由Facebook开发和使用的开源C++库。...UnQLite: 独立、无服务器、零配置的事物型NoSQL引擎。 upscaledb: 具有内置查询接口的嵌入式“typed”键值存储。...POCO: 用于构建网络和基于互联网应用程序的C++类库,可以运行在桌面,服务器,移动和嵌入式系统。 Proxygen: Facebook的C++ HTTP库集合,包括易于使用的HTTP服务器。...Magic Enum: 只包含头文件的的C++ 17库,为枚举类型(字符串、迭代)提供静态映射,可与任何枚举类型一起使用,无需任何宏或样板代码。...Web应用框架 Civetweb: 提供易于使用,强大的,C/C++嵌入式Web服务器,带有可选的CGI,SSL和Lua支持。
[1] Document ::= Header* Definition* Header 标头可以是 Thrift 包含、C++ 包含或命名空间声明。...Typedef typedef 为类型创建一个备用名称。...[9] Typedef ::= 'typedef' DefinitionType Identifier Enum 枚举创建具有命名值的枚举类型。...强烈建议不要使用此功能 Union 联合类似于结构,除了它们提供了一种方法来传输一组可能的字段中的一个字段,就像 C++ 中的 union {} 一样。...默认值:设置 isset 标志时写入 大多数语言实现使用所谓的“isset”标志的推荐做法来指示是否设置了特定的可选字段。 仅写入设置了此标志的字段,相反,仅当从输入流中读取字段值时才设置该标志。
关键词: 嵌入式,C语句,编程规范” 分享GitHub上一位老外的嵌入式C编码规范(收藏细读)[1] 01 最重要的规则 编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。 ...for negative check */ 对于注释,总是使用/* comment */,即使是单行注释 在头文件中总是包含带有extern关键字的c++检查 每个函数都必须包含doxygen-enabled...(x) : (y)) 10 头/源文件 在文件末尾留下一个空行 每个文件都必须包括文件的doxygen注释和后跟空行的简要描述(使用doxygen时) /** * \file...+检查 在c++检查之外包含外部头文件 首先用STL C文件包含外部头文件,然后是应用程序自定义文件 头文件必须包含其他所有头文件,以便正确编译,但不能包含更多头文件(如果需要,.c应该包含其余的头文件...) 头文件必须只公开模块公共变量/类型/函数 在头文件中使用extern作为全局模块变量,稍后在源文件中定义它们 /* file.h ... */ #ifndef ...
char_16_t 和 char32_t 你不能再使用 char16_t 或 char32_t 作为 typedef 中的别名,因为这些类型现在被视为内置。...考虑是否可以使用任何 placement new 和 placement delete 运算符的其他类型(size_t 除外)。...请注意,size_t typedef 的类型取决于编译器;在 Visual C++ 中,它是一个无符号整型的 typedef。... va_start 和引用类型 编译 C++ 代码时, va_start 现在会在编译时验证传递给它的参数是否为引用类型。...允许 STL 标头以未指定的方式相互包含。 一般情况下,应编写你的代码,以便其根据 C++ 标准谨慎包括其需要的所有标头,且不依赖于哪些 STL 标头包含哪些其他 STL 标头。
1 前言 List是C++标准模板库(STL)中的一个成员,其本质为带头双向循环链表。...多种构造:类都应该包含多种构造函数 支持迭代器:迭代器是C++重要的特性,我们写的list 也一定要支持迭代器。...2.2 list 类 我们先进行简单的框架书写,构造函数需要创建一个头结点,因为我们要创建双向循环链表,所以头尾都要指向头结点本身。 _size赋初值。...那这样就发现了不同常迭代器应该为 const T& operator*() 和 const T* operator->() ,所以有没有一种办法可以简单解决呢,当然有了,我们设置一个新模版(带有三个参数...; 这样就实现了迭代器的创建,是不是就非常简洁了呢 3 功能实现 3.1 begin() 与 end() 使用迭代器即可,注意end()是头结点,因为遍历过程中,全部遍历后会回到头结点,所以直接判断是否为头结点就能控制结束位置
从定位上来看,Vely 语言自身就是为了快速构建具有最大性能的服务器端应用程序而生。 Sergio Mijatovic 表示,通过使用 Vely 语言,这意味着生成高效和安全的 C 代码的简单语句。...因此,Vely 的目标是偏向嵌入式语言的一侧,因为构建应用程序会更安全,更丰富,更快捷,并在需要时编写 C。...当前,Vely 是一款自由开源软件,根据 GNU 通用公共许可证 v3.0 (GPL 3),开发者可以使用 Vely 编写应用程序(包括专有和商业),而无需发布源代码。...在应用场景上,Hare 使用静态类型系统、手动内存管理和最小运行时,由此它非常适合编写操作系统、系统工具、编译器、网络软件和其他低级高性能任务。...速度快,可与 C++ 一起使用 性能与使用LLVM的C++相匹配,具有对位和地址的低级访问 从“遗产”到模板,实现与现有的 C++ 代码互操作 快速和可扩展的构建,与现有的 C++ 构建系统一起工作 2
应注意到这样一个事实:若两个链表有一个公共结点, 则该公共结点之后的所有结点都是重合的,即它们的最后一个结点依然是重合的。...,设head为头指针,结点结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作为辅助空间...试编写算法判断单链表是否存在环。 1)给出算法的基本设计思想。 2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。 3)说明你所设计算法的时间复杂度和空间复杂度。...要求: 1)描述算法的基本设计思想。 2)描述算法的详细实现步骤。 3)根据设计思想和实现步骤,采用程序设计语言描述算法(使用C、C++或Java 语言实现),关键之处请给出简要注释。...例如,若给定的单链表head 如下: 要求: 1)给出算法的基本设计思想。 2)使用C或C++语言,给出单链表结点的数据类型定义。 3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
所以,这次重温C++也是想了解下这种奇异现象的原因。 C++重温 首先打开VisualStudio,创建一个C++的Windows控制台应用程序,如下图: ?...调查后得知,原来,c++里没有string类型,想使用string类型,只能先引用string的头文件,在引用命名空间std,如下: #include "pch.h" #include typedef,指针,引用类型,const define 首先说define,define在C++里好像叫做宏。...还有更麻烦的。 比如,我想在我定义的结构体里使用自身的类型,要怎么定义呢? 因为在C++里,变量定义必须按照先声明后使用的【绝对顺序】,那么,在定义时就使用自身类型,编译器会提示错误。...如图,系统我们创建的pch.h头文件,被设置成了预编辑头文件。 下面,我修改【预编译头】属性,修改为不使用预编译头,然后我们再删除【#include "pch.h"】引用,编译器就不会报错了。
我惊奇的发现有很多是有经验的程序员都还没意识到 .h 符号是否还应该出现在标准头文件中。 要点1: 还是 ? 很多C++程序员还在使用而不是用更新的标准的库。这两者都有什么不同呢?...要点2:用引用传递参数时应注意的地方 在用引用传递参数时,最好把引用声明为const类型。这样做的好处是:告诉程序不能修改这个参数。...首先,使用typedef声明“指向一个无返回和无运算的函数的指针”: typedef void (*pfv)(); 接着,声明“另一个指向无返回且使用pfv的函数指针”: typedef void...事实上,在一个平台上使用delete代替delete[]的应用程序也许不会造成系统崩溃,但那纯粹是运气。...你不能保证你的应用程序是不是会在另一个编译器上编译,在另一个平台上运行,所以还是请使用delete[]。
它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。...上面的都是在本科阶段学习C++里面的一讲《抽象数据类型》里面的内容。当时教学时是先讲C++基本的语法规则,再讲类。...C++基本的语法规则和C语言基本类似,所以在讲C++“面向对象”最重要的特点――类之前,用“抽象数据类型”进行了一次过渡。...C++目前基本上没有用过,类也用得不深入,但是“抽象数据类型”的思想却留下来了,这样使得自己对大规模的C语言程序设计的基本模式有了比较好的基础和概念了。...,使得大规模的嵌入式系统的C语言程序设计变得更加容易了。
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。...具体使用时,需要注意以下两点: (1)对于内置数据类型,因为没有构造和析构函数,所以使用delete和delete[]的效果是一样的。...比如: int* pDArr=new int[3]; //processing code delete pDArr; //等同于delete[] pDArr 对于内置数据类型,虽然可以使用delete完成对象数组内存空间的释放...所以,new[]与delete[]使用时应一一对应。...(2)对于经常使用typedef的程序员来说,很容易new[]与delete的混用,例如有如下操作: typedef int Height[NUM]; int* pHeight=new Height;
具体使用时,需要注意以下两点: (1)对于内置数据类型,因为没有构造和析构函数,所以使用delete和delete[]的效果是一样的。...比如: int* pDArr = new int[3]; //processing code delete pDArr; // 等同于 delete[] pDArr 对于内置数据类型,虽然可以使用delete...所以,new[] 与 delete[] 使用时应一一对应。...(2)对于经常使用 typedef 的程序员来说,很容易 new[] 与 delete 的混用,例如有如下操作: typedef int Height[NUM]; int* pHeight = new...为了避免出现上面的错误,建议不要对数组使用 typedef,或者采用 STL 中的 vector 代替数组。
要点2:用引用传递参数时应注意的地方 在用引用传递参数时,最好把引用声明为const类型。这样做的好处是:告诉程序不能修改这个参数。...首先,使用typedef声明“指向一个无返回和无运算的函数的指针”: typedef void (*pfv)(); 接着,声明“另一个指向无返回且使用pfv的函数指针”: typedef void (*...后则其实并不常用,因为类一般是不含有公共数据成员的,仅当用在继承用C写的代码时协调结构(struct)和类(class)时才会用到。...事实上,在一个平台上使用delete代替delete[]的应用程序也许不会造成系统崩溃,但那纯粹是运气。...你不能保证你的应用程序是不是会在另一个编译器上编译,在另一个平台上运行,所以还是请使用delete[]。
设备类型Android对应的比如智能手机、平板、物联网设备等,Linux对应的比如嵌入式设备、物联网设备等。...我们通常使用Java来开发Android应用程序,使用C/C++来开发Linux应用程序。...Gradle:Android Studio使用Gradle作为构建系统,它负责处理应用程序的依赖关系。...嵌入式Linux包管理和依赖管理: 包格式:嵌入式Linux系统的包格式取决于具体的发行版,如Debian/Ubuntu使用deb包,Red Hat/CentOS使用RPM包,OpenWrt使用opkg...应用程序的安装包 Linux系统上的可执行程序 打包内容 应用程序代码、资源、清单文件等 可执行代码、数据、符号表等 代码类型 Java/Kotlin字节码、C/C++库(可选) 通常为编译后的机器代码
这些优点使得 C++ 成为广泛使用的编程语言,被应用于各个领域,如操作系统、嵌入式、数据库、游戏开发、音视频传输、图像处理、金融和科学计算等。...除了标准 C++ 语言的基础特性外,C++ 标准库(STL)也提供了丰富的数据结构和算法库,可用于开发各种类型的应用程序。...数据类型 C++提供了7种基本数据类型,包含bool char int float double void wchar_t,宽字符型其实是typedef short int wchar_t。...此外,可以用typedef为一个已有的类型取一个新的名字,即typedef type newname,如typedef int int32。 enum是一种派生数据类型,是用户定义的一系列常量集合。...< std::endl; 变量与常量 变量是用来存储数据的内存位置,在使用前需要先声明并指定数据类型。
,使用少量内存(64kb Flash, 16kb RAM)支持操作系统、外部内存和GPU,但不是必需的单帧缓冲操作,甚至与高级图形效果用C编写的最大兼容性(c++兼容)模拟器在没有嵌入式硬件的PC上开始嵌入式...kB,取决于使用的功能和对象类型堆: > 2kB (> 建议使用 8 kB)动态数据(堆): > 2 KB (> 如果使用多个对象,建议使用 16 kB)....一个带有内置LCD/TFT驱动器的外围设备,而另一种是没有内置LCD/TFT驱动器的外围设备。相同的是,这两种情况都需要一个帧缓冲区来存储屏幕的当前图像。...Qt for MCUs带有三样开发工具,包括一个配备了完善的代码编辑器、版本控制等功能的IDE(Qt Creator);以Qt QML语言编写的帮助从头开始或基于咸亨UI空间快速设计和构建应用程序的组件...优点创建惊人的图形与功能强大,易于使用的API适用于任何显示器和微控制器适用于任何ANSI C/C++开发环境体验可靠的图形解决方案嵌入式图形用户界面解决方案最后上一张对比图,更直观!
一,SQLite数据库简介 SQLite是可以实现类似于关系型数据库中各种操作的事务性SQL数据库引擎,可以为应用程序提供存储于本地的嵌入式数据库,帮助应用程序实现轻量级的数据存储。...SQLite是一个库文件,并不是单独的进程,它可以静态或动态链接到C++应用程序中,然后应用程序可以利用SQLite提供的编程接口进行访问和处理SQLite存储文件,存储文件一般带有".db"后缀。...在C/C++开发场景使用SQLite,上手特别容易,前期只需要在文件系统中创建一个新文件并调用SQLite提供的C/C++函数去连接即可。...SQLite的设计初衷是为了替代更复杂和重量级的数据库引擎,例如MySQL、PostgreSQL等。如今,SQLite已被广泛使用在应用程序开发场景,包括Web浏览器、移动端APP、嵌入式软件等。...:从表中删除索引 INSERT INTO:往表中插入新的行 UPDATE:更新表中的数据 DELETE FROM:从表中删除数据 SELECT:从表中检索数据 JOIN:基于公共字段从多个表中检索数据
领取专属 10元无门槛券
手把手带您无忧上云