04std_C++
文章平均质量分 62
halazi100
勤勉务实、守正创新
展开
-
如何生成coredump并解析
如何生成coredump并解析。原创 2023-07-05 15:47:59 · 1399 阅读 · 0 评论 -
C++异步定时器设计与实现
用于创建定时器,有三个参数,分别是定时时长(单位毫秒),超时callback用于定时器到期的回调,定时器类型(单次还是循环定时器);原创 2023-06-12 14:20:36 · 2765 阅读 · 0 评论 -
cppcheck代码检查工具安装与使用技巧
cppcheck代码检查工具安装与使用技巧Cppcheck 是一种 C/C++ 代码缺陷静态检查工具。不同于 C/C++ 编译器及很多其它分析工具,它不检查代码中的语法错误。Cppcheck 可以检查非标准代码,包括不同的编译器扩展、内联汇编代码等。Cppcheck 可以检测到在测试和评估软件时错过的一些 bug。原创 2023-03-22 16:39:25 · 3620 阅读 · 1 评论 -
消息序列化工具-为现代C++设计的jsoncpp介绍与使用技巧
JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于 JSON 更具体的信息,可参见 JSON 官网:http://www.json.org。原创 2023-03-22 11:28:16 · 538 阅读 · 0 评论 -
C++UML类图的关系
C++UML类图的关系在C++中UML主要用来描述软件中类和对象以及它们的静态关系。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图的3个基本组件:类名;属性;方法;可见性(visibility):+ public- private# protected实例个数(multiplicity)0..1, 无实例,或者1个实例;1, 只有一个实例;0..*, 任意个实例;1..*, 1个以上实例;常见的UML类图关系泛化(General原创 2022-05-26 13:49:27 · 755 阅读 · 0 评论 -
Android-Hal-C++打印调用栈
Android-Hal-C++打印调用栈debuggerd是android的一个daemon进程,负责在进程出错异常时,将进程的运行时信息给dump出来供分析。debuggerd的core dump数据,被保存在 /data/tombstone/ 目录下,共可保存10个文件,当超过10个时,会覆盖最早生产的文件。在debug时,一般情况下,当程序出现异常时会自动将core dump信息保存起来。当需要手动调试自己的程序并需要主动打印调用栈时,可以使用Android的callstack库。使用步骤如下原创 2022-04-14 17:40:15 · 3651 阅读 · 0 评论 -
undefined reference to xxx 问题总结
undefined reference to xxx 问题总结GCC编译过程预处理Pre-Processing;宏展开等,可以生成.i文件编译Compiling(狭义的编译);进行语法分析,转换成汇编语言,生成.s文件汇编Assembling;把汇编语言代码转换成目标代码,生成.o文件连接Linking;连接器ld将as创建的目标文件转换为可执行文件,生成a.out文件代码的基本语法与格式错误一般是在前几个阶段被发现的,在最后一步即连接时才会报错 undefined reference原创 2022-03-30 19:15:07 · 1031 阅读 · 0 评论 -
C++string与vector及buffer互相转换
1. char buffer[] 与 string 互转buffer --> stringstring str(buffer);str.assign(buffer);str.assign(buffer, strlen(buffer)); // (char *start, length)str.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1); // (char *start, length)string --> buffer原创 2022-03-17 13:26:20 · 1238 阅读 · 0 评论 -
C++ Lambda表达式
C++Lambda表达式C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。1. Lambda 的语法形式如下:[参数捕获列表] (函数参数列表) mutable 或 exception 声明 -> 返回值类型 { Lambda函数体 }可以看到,Lambda 主要分为五个部分:[参数捕获列表](函数参数列表)mutable 或 exception 声明-> 返回值类型{ Lambda函数体 }2. Lambda 语法分析2.1 [原创 2022-02-15 14:45:53 · 1058 阅读 · 0 评论 -
C/C++中枚举值转字符串的技巧
在C、C++中经常需要定义枚举值,或根据枚举值来获取对应的枚举字符串,以下示例巧妙的利用宏的特性来实现,请参考。原创 2022-02-09 14:47:03 · 11898 阅读 · 4 评论 -
C++函数调用栈使用进阶
函数调用栈高级用法当程序运行异常退出时自动打印当前的函数调用栈,便于分析定位问题;设计思路:设计一个C++类 CallStack, 该类封装函数调用栈相关信息的搜集与组装;设计一个C函数 callstack_dump(), 该接口创建一个函数调用栈类实例对象并输出函数调用栈;设计一个信号处理函数 signal_SEGV_handler(int),该接口用于调用上一步的API;使用上一步设计的函数,注册为信号处理函数;模仿android封装一个callstack类CallStack头文件原创 2021-07-20 13:26:05 · 764 阅读 · 0 评论 -
C++中记录并解析函数调用栈callstack
glibc中提供了backtrace()和backtrace_symbols()两个函数来输出和解析程序的call stack,输出程序运行时调用栈信息可以通过命令man backtrace查看具体帮忙信息。#include <execinfo.h>int backtrace(void **buffer, int size);char **backtrace_symbols(void *const *buffer, int size);使用backtrace()函数获取调用栈原创 2021-07-13 15:57:42 · 2398 阅读 · 0 评论 -
设计模式-单实例-C++Singleton类模板实现及使用
C++单实例类模板实现及使用单实例类注意事项:1. 构造私有化,拷贝构造函数及重载=操作符也私有化,暴露新的访问接口;2. 推荐使用懒汉式即 getInstance()接口且使用双重锁定,既解决多线程安全问题又保证性能,同时还要防止某一用户delete获取到的实例导致其他用户无法正常使用;3. 考虑资源回收,使用内部类Garbo及其静态对象,系统自动析构全局变量及静态成员变量时可以实现自动删除单实例对象;一般单实例对象会一直伴随系统存在,不设计回收问题不大;4. 静态成员变量要类外初始化,其中原创 2020-07-06 15:34:51 · 697 阅读 · 0 评论 -
Android-Gnss/GPS HAL层实现绑定+直通式修改为纯绑定式示例
Android-Gnss/gps HAL层实现直通式修改为绑定式的简单方法先来看一下 Gnss/GPS HAL service 直通式的调用方式using android::hardware::gnss::V1_0::IGnss;using android::hardware::defaultPassthroughServiceImplementation;int main() { android::ProcessState::initWithDriver("/dev/vndbind原创 2020-07-02 12:07:59 · 5951 阅读 · 0 评论 -
Android-GnssHal层gps.xxx.so查找与加载过程分析
Android-GnssHal层gps.xxx.so加载过程分析gps.xxx.so不是在编译的时候直接prelink而是在运行阶段动态查找并加载的;已 [email protected] 为例[email protected] 会在系统启动时 启动 [email protected]然后通过 hw_get_module 获取到对应的module并open以及获取 interface ;I原创 2020-07-01 15:49:26 · 5111 阅读 · 2 评论 -
eclipse-cpp安装后配置及常用快捷键
eclipse-cpp安装后配置及常用快捷键project Explorer中勾选 link with editor, 使当前编辑文件与project中文件保持视图同步右击->Show In -> System Explorer 在资源管理器中打开文件所在位置参考https://plantuml.com/zh/eclipse安装 plantUML 插件后打开plantUML视图,[Window]->[Show View]->[Other...]->[plantUML]原创 2020-05-24 14:45:39 · 407 阅读 · 0 评论 -
android中json的拼装与解析
android中json的拼装与解析java 层使用的库为 org.json首先导入以下packageimport org.json.JSONException;import org.json.JSONObject;import org.json.JSONArray;构建json文本如int sequenceId = 1;String payload = "xxxxx";try { JSONObject jsonObject = new JSONObject();...原创 2020-05-19 18:07:02 · 1071 阅读 · 0 评论 -
Android-LocationManager注册LocationListener及回调流程分析
android LocationManager注册回调过程private LocationManager lm;private LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location){}}long minTime = 700;float minDistance = 0.0f;lm.requestLocationUpdat...原创 2020-05-11 20:17:02 · 2032 阅读 · 0 评论 -
C++中的chrono使用及实现异步定时器timer
C++中的chrono使用及timer定时器封装由于C++标准中没有定时器,本文使用C++11相关语法并进行以下封装大致流程为定时器启动时创建两个线程分别用于时间处理和函数回调操作;m_timerThread每秒都会触发条件变量的notify,m_workerThread会等待条件变量被触发后执行callback;设计两个线程的目的是为了尽可能的避免单线程工作中callback处理时间的...原创 2020-05-07 17:05:07 · 3968 阅读 · 0 评论 -
clock_gettime获取系统时间
clock_gettime获取系统时间clock_gettime()是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。需要包含头文件#include<time.h>函数原型为int clock_gettime(clockid_t clk_id,struct timespec *tp);参数clk_id 获取和设置指定时钟时间的 clk_id;//CLO...原创 2020-05-05 22:24:20 · 19470 阅读 · 0 评论 -
C++实现GNSS/GPS的NMEA数据格式解析类示例
nmea数据具体各字段的含义请参考标准定义,这里给出一个C++实现的例子,环境是Android;解析.h头文件#ifndef VENDOR_HAL_GNSS_V1_0_GPSNMEAPARSER_H#define VENDOR_HAL_GNSS_V1_0_GPSNMEAPARSER_H#include <cstdio>#include <iostream>...原创 2020-05-05 18:19:34 · 4554 阅读 · 0 评论 -
C++使用stringstream实现字符串与数值类型互相转换
C++11中已经提供了一些用户string与int,float等类型的转换函数,如stoi,stol等;我们还可以使用stringstream类来实现转换;示例如下该方法实现了两个模版函数,需要将数值类型传递给模板函数如stringToNumber<int>(xxx),stringToNumber<double>(xxxx);等/************...原创 2020-03-24 09:11:17 · 617 阅读 · 0 评论 -
C++使用string函数及vector封装一个split及join函数
C++使用string函数及vector封装一个split函数使用find函数及substr来将字符串根据分隔符分割之后输出到一个vector中,类似于python的split函数/***************************************** * Copyright (C) 2020 * Ltd. All rights reserved. * File name...原创 2020-03-13 23:01:08 · 4483 阅读 · 0 评论 -
C++string与vector及buffer互相转换
一般利用其构造函数或assign赋值;1. char buffer[] 与 string 互转buffer --> stringstring str(buffer);str.assign(buffer);str.assign(buffer, strlen(buffer));str.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1...原创 2020-01-07 14:05:42 · 3549 阅读 · 0 评论 -
C++中模板template的使用
C++中模板的使用https://blog.csdn.net/fengbingchun/article/details/51339659模板(Template)指C++程序设计语言中的函数模板与类模板,是一种参数化类型机制。模板是C++泛型编程中不可缺少的一部分。C++ templates enable you to define a family of functions or cla...转载 2018-11-13 22:22:03 · 2127 阅读 · 0 评论 -
C++中数组的引用—防止数组退化
在c语言中,数组作为函数参数时,实际上数组已经退化为指针使用。 下面这三种用法是等价的:int f1(int apples[]);int f1(int apples[10]);int f1(int* apples);这样一来,在f1中是无法知道数组的大小的,开发者必须提前知道数组大小。C++中定义了数组的引用(例如,int (&a)[2]),可以有效的防止数组退化。 也...原创 2018-11-13 22:19:58 · 598 阅读 · 0 评论 -
C++中backtrace打印函数调用栈callstack-dbg_assert
1. 使用backtrace()函数获取调用栈,是一个指针数组,返回获取到的调用栈个数,结果放到传入的指针数组里面;2. 调用backtrace_symbols()把获取的指针数组和数组中调用栈个数传递给该函数,会返回一个新的指针数组, 里面是已经转换成符号表的调用栈信息;用完后记得需要free返回的指针变量指向的内存空间;使用这两个函数需要包含execinfo.h头文件;下面把这个...原创 2018-11-13 22:19:16 · 5277 阅读 · 0 评论 -
C++中auto关键字的使用及编译错误解决
auto可以自动帮我们推断变量的类型比如在定义一些难以确定的变量类型时 35 func_log(__func__, ""); 36 // vector<Student>::iterator it = Students.begin(); 37 for (auto it = Students.begin(); it != Students.end(); i...原创 2018-11-13 22:18:16 · 8871 阅读 · 1 评论 -
C++面向对象多态的实现及原理理解
多态与递归类似,不管是书中还是老师授课,都把其讲得神乎其神,让读者一头雾水,莫名其妙。多态实际上非常简单,学习的难点在于在接触多态之前,缺乏一个感性的认识。多态允许将子类的对象当作基类的对象使用,某基类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法在代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。再举个比较形象的例子:比如有一个函数是叫某个人...原创 2018-08-06 13:02:12 · 1180 阅读 · 0 评论 -
C++实现简单遗传算法
//遗传算法 GA #include #include #include using namespace std; const int L=5; //定义编码的长度 int f(int x) //定义测设函数f(x) { int result; result=x*x*x-60*x*x+900*x+100; return result; } int main(int argc,char *a转载 2015-07-11 15:45:00 · 2963 阅读 · 1 评论 -
C++中的inline内联函数
inline 关键字可以只在函数定义处添加,也可以只在函数声明处添加,也可以同时添加;但是在函数声明处添加 inline 关键字是无效的,编译器会忽略函数声明处的 inline 关键字。也就是说,inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。尽管大多数教科书中在函数声明和函数定义处都增加了 inline 关键字,但我认为 inline 关键字不应该出现在函数声明处。这...原创 2018-11-13 22:22:41 · 295 阅读 · 0 评论 -
C++中的文件file和流缓冲streambuf操作
1.引入头文件fstream#include <fstream>fstream头文件定义了用于文件输入的类ifstream和文件输出的类ofstream参考文档 http://www.cplusplus.com/reference/fstream/ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istr...原创 2019-01-15 19:42:36 · 6539 阅读 · 0 评论 -
C++中STL中string类的使用
要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件using std::string;using std::wstring;或using namespace std;构造函数string();string( size_type l...原创 2019-02-22 19:56:09 · 765 阅读 · 0 评论 -
C++中STL中vector的使用
把三个常用的序列式放在一起对比一下是有必要的:vector : vector和built-in数组类似,拥有一段连续的内存空间,能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当插入较多的元素后,预留内存空间可能不够,需要重新申请一块足够大的内存并把原来的数据拷贝到新的内存空间。这些影响了vector的效率,但是实际上用的最多的...原创 2019-03-01 15:30:55 · 706 阅读 · 0 评论 -
C++定义map类型的模板迭代器
C++定义map类型的模板迭代器template <typename K, typename V>using MapIterator_T = typename std::map<K, V>::iterator;使用下面这种形式会报错template <typename K, typename V>typename std::map<K,...原创 2019-03-05 18:40:29 · 2256 阅读 · 0 评论 -
C++中的STL中list用法
1.关于list容器list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首...原创 2019-03-04 14:20:13 · 7795 阅读 · 1 评论 -
C++中的STL中map类用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力,由于这个特性,在我们处理一对一数据的时候提供快速通道;这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处;3.1 ...原创 2019-03-07 16:10:11 · 10206 阅读 · 2 评论 -
protobuf学习使用总结
protobuf是google团队开发的用于高效存储和读取结构化数据的工具。xml、json也可以用来存储此类结构化数据,但是使用protobuf表示的数据能更加高效,并且将数据压缩得更小,大约是json格式的1/10,xml格式的1/20。以下介绍基于protobuf 2.6版本定义message结构protobuf将一种结构称为一个message类型,对应C/C++中的struct...原创 2019-07-23 10:39:28 · 805 阅读 · 0 评论