
C/C++
子建莫敌
热爱生活,拥抱技术
展开
-
VS提示“fatal error LNK1169:找到一个或多个多重定义的符号“的终极解决方案
VS 提示“fatal error LNK1169:找到一个或多个多重定义的符号”或“fatal error LNK1169:one or more multiply defined symbols found”右键项目,属性->链接器->命令行。原创 2023-01-31 15:34:41 · 1650 阅读 · 0 评论 -
c++ CJsonObject 读写json
CJsonObject是Bwar基于cJSON全新开发一个C++版的JSON库,CJsonObject的最大优势是简单、轻量、跨平台,开发效率极高,尤其对多层嵌套json的读取和生成、修改极为方便。CJsonObject比cJSON简单易用得多,且只要不是有意不释放内存就不会发生内存泄漏。用CJsonObject的好处在于完全不用专门的文档,头文件即文档,所有函数都十分通俗易懂,最为关键的一点是解析JSON和生成JSON的编码效率非常高。原创 2022-11-28 15:55:20 · 1822 阅读 · 0 评论 -
VS2019番茄助手添加头文件防重复宏定义#ifn
添加防止头文件重复包含的快捷方式:在VA Snippet Editor中Type选择All by Title->#ifndef ... #endif快捷方式:#ifn,内容:#ifndef __$FILE_BASE_UPPER$_H__#define __$FILE_BASE_UPPER$_H__$end$#endif //__$FILE_BASE_UPPER$_H__原创 2021-06-29 19:16:44 · 805 阅读 · 0 评论 -
vs201x下正则表达式过滤中文
业务需要匹配汉字,给出的正则表达式:\u4e00-\u9fa5\u4e00-\u9fa5 是匹配Unicode的汉字,C++对unicode支持不怎么好,如果你是windows下的vs编译的程序,普通字符串编译之后都是ANSI编码也就是GBK,L""字符串则是UTF16 LE在c++11之后,可以尝试使用u8""(UTF8)u""(UTF16)U""(UTF32)来指定unicode字符串的不同UTF编码形式如:u8"\u4e00-\u9fa5"...原创 2021-05-06 11:31:21 · 158 阅读 · 0 评论 -
windows程序运行找不到msvcp120d .dll,无法继续执行代码
压缩包:https://pan.baidu.com/s/1VcYtdr2p87FInO61i-55yA提取码:jtkw截图:解决方式(不要怀疑下面写错了,是正确的):下载压缩包,并解压; 32位的msvcp120d 和msvcr120d放到了C:\Windows\SysWOW64, 64位的msvcp120d 和msvcr120d放到了C:\Windows\System32。最后,重新启动即可。...原创 2021-03-05 20:39:27 · 552 阅读 · 0 评论 -
VS生成map文件
1.如何设置生成map文件打开项目属性-》链接器-》调试--》生成映射文件: 选择 是(/map)链接阶段生成的map文件命令行参数是/mapmap就是一个映射文件,猜测是映射符号和地址之间的关系。因为真正的执行阶段不需要符号的信息,只需要地址。而exe里面应该就是都是地址,不知道是具体的符号。而pdb正好是符号信息。2.map文件内容map文件的类型就是LinkerAddressMappdb和map文件均为调试用pdb记录数据和调试信息(https://d...原创 2020-12-03 00:11:08 · 1168 阅读 · 0 评论 -
Qt项目生成map和pdb文件
默认情况下,Qt项目在window系统发布版本不生成map/pdb文件。将以下内容添加到.pro文件中:QMAKE_LFLAGS_RELEASE+=/MAPQMAKE_CFLAGS_RELEASE += /ZiQMAKE_LFLAGS_RELEASE +=/debug /opt:ref原创 2020-12-03 00:08:29 · 1810 阅读 · 1 评论 -
VS生成Map文件
map文件具体操作:一、右键项目属性->链接器->启用增量链接:关闭,选择 否 (/INCREMENTAL:NO)二、右键项目属性->链接器->调试->生成调试信息:是 (/DEBUG)生成程序数据库文件: 输入pdb文件名生成映射文件: 是 (/MAP)映射文件名:输入map文件名书到用时方恨少,是非经过不知难。 博观而约取,厚积而薄发。@karllen 每天进步一点点。...原创 2020-12-03 00:03:07 · 683 阅读 · 0 评论 -
git命令汇总
查看所在分支 git branch -agit branch -d fix-118 /*删除本地分支*/git remote -vorigin git@github.com:zhongkebairong/sandbox.git (fetch)origin git@github.com:zhongkebairong/sandbox.git (push)切换分支创建一个新的分支 git checkout -b fix-117(feat-118) (develop)...原创 2020-11-30 14:02:05 · 156 阅读 · 0 评论 -
常用设计模式
分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:...原创 2020-10-27 23:38:28 · 158 阅读 · 0 评论 -
C/C++中static const和const的区别
static const int flag= 10;const int num = 10;注解:static修饰全局变量,表示只在本文件(private)中可见,在其他文件不可见拓展:为保证全局变量仅在本文件可见,C++有两种办法:1.用static修饰2.定义匿名空间namespace { const int flag = 10;}...原创 2020-10-26 10:19:08 · 225 阅读 · 1 评论 -
禁止Windows程序自适应比例缩放
1.调用SetProcessDPIAwareHINSTANCE hUser32 = LoadLibrary(L"User32.dll");if (hUser32) { typedef BOOL (WINAPI* LPSetProcessDPIAware)(void); LPSetProcessDPIAware pSetProcessDPIAware = (LPSetProcessDPIAware)GetProcAddress(hUser32, "SetProcess原创 2020-10-17 23:57:20 · 1482 阅读 · 0 评论 -
C++引用计数
作用:简化跟踪堆中的对象的过程,对象自己拥有自己。当没人使用它时,自动销毁自己。(垃圾回收体系) 让对象共享值,(不需要构造函数和析构这个值的拷贝)节省内存,使程序运行更快。实现class String{public: String(const char* initValue=""); String(const String& rhs); ~String(); String& operator=(const String& rhs)p原创 2020-07-13 23:17:20 · 230 阅读 · 1 评论 -
C++内存管理方式
在C++中,内存分为:栈、堆、自由存储区、全局/静态存储区、常量存储区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束是这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率高,分配的内存容量有限。堆,就是那些由malloc等分配的内存块,用free来释放内存。自由存储区,那些由new分配的内存块,由应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。全局/静态存储区,全局变量和静态变量被分原创 2020-07-07 23:47:14 · 202 阅读 · 0 评论 -
Effective C++ 笔记之限制类产生对象的数量
C++中,每次实例化一个对象,都会调用一次构造函数,阻止建立类的对象,最容易的方法就是私有化构造函数class A{private: A(); A(const A& a);};原创 2020-07-05 10:55:32 · 167 阅读 · 0 评论 -
More Effective C++读书笔记
指针和引用指针的使用场景不存在指向任何对象的可能 能够在不同时刻指向不同的对象引用的使用场景总是指向一个对象,并且不改变其指向 需要重载某个运算符时C++风格的类型转换static_cast:同C风格的类型转换一样强大,含义也一样,但有功能上的限制:不能将struct转为int或其他数据类型。 const_cast:用于类型转换掉表达式的 const 或 volatileness 属性。 dynamic_cast:用于安全地沿着类的继承关系向下进行类型转换,把指向基类的指针或引用原创 2020-06-30 23:32:29 · 323 阅读 · 0 评论 -
多线程同步示例
多线程同步方式:临界区、事件、信号量、互斥量#include <windows.h>#include <iostream>#include <stdlib.h>using namespace std;int num = 1;CRITICAL_SECTION critical; // 临界区HANDLE hEvent; // 事件HANDLE hSemaphore; // 信号量HANDLE hMutex; // 互斥.原创 2020-05-15 16:27:33 · 183 阅读 · 0 评论 -
c++右值引用及使用
一、几个基本概念1.1右值右值表示无法获取地址的对象,有常量值、函数返回值、lambda表达式等。无法获取地址,但不表示其不可改变,当定义了右值的右值引用时就可以更改右值。1.2 右值引用c++11中增加了右值引用,右值引用关联到右值时,右值被存储到特定位置,右值引用指向该特定位置,也就是说,右值虽然无法获取地址,但是右值引用是可以获取地址的,该地址表示临时对象的存储位置。语法如下...原创 2020-04-22 23:11:09 · 2336 阅读 · 0 评论 -
C++获取windows电脑mac地址
#include <IPHlpApi.h>#pragma comment(lib, "Iphlpapi.lib")std::wstring Encode16(const BYTE *buf, int len){ const WCHAR strHex[] = L"0123456789ABCDEF"; std::wstring wstr; wstr.re...原创 2020-04-21 11:25:14 · 957 阅读 · 0 评论 -
简述加解密算法
加密算法对称加密:加密和解密使用同一个秘钥,如:des,3des,aes,blowfish,twofish,idea,rc6,cast5单向加密:只能加密,不能解密,主要用来验证数据是否完整,如:md5,sha1,sha224非对称加密:公钥加密,加密和解密使用不同的密钥,分为公钥和私钥。如:数字签名,密钥交换,数据加密公钥:从私钥中提取产生,可公开私钥:通过工具创建,使用者自...原创 2020-04-15 11:38:49 · 411 阅读 · 0 评论 -
多线程MT和MD的区别
/MD、/MT的选择1、为什么选择/MD,不选/MT?(1)程序就不需要静态链接运行时库,可以减小软件的大小;(2)所有的模块都采用/MD,使用的是同一个堆,不存在A堆申请,B堆释放的问题; (3)用户机器可能缺少我们编译时使用的动态运行时库。(补充:如果我们软件有多个DLL,采用/MT体积增加太多,则可以考虑/MD+自带系统运行时库...原创 2020-04-09 18:35:53 · 2050 阅读 · 0 评论 -
简述ProtoBuf
全称:protocol buffers一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等一种灵活、高效,自动化机制的结构数据序列化方法-可类比XML,但是比XML更小(3-10倍)、更快(20-100倍)、更为简单。体现:可以定义数据的结构,然后使用特殊生成的源代码轻松地在各种数据流中使用各种语言进行编写和读取结构数据,甚至可以更新数据结构,...原创 2020-04-08 11:52:42 · 218 阅读 · 0 评论 -
C++强制类型转换
C++四种强制类型转换 static_cast 用法:static_cast<type-id>(expression)把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性用途:1)类层级结构中基类(父类)和派生类(子类)之间指针或引用的转换 上下转换:派生类的指针或引用转换成基类,安全 下行转换:基类的指针或引...原创 2020-03-12 11:32:17 · 170 阅读 · 0 评论 -
VS 运行库MT、MD的区别
VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。目前Win7、Win10等,选择MD问题不大,但是XP等一些比较老的系统需要选择MT两者的区别/MT是 "multithread, static version ” 意思是多线...转载 2020-03-12 10:49:43 · 1057 阅读 · 0 评论 -
LIB和DLL的区别与使用
http://www.cppblog.com/amazon/archive/2009/09/04/95318.html原创 2020-03-12 10:47:44 · 105 阅读 · 0 评论 -
C强制类型转换
c语言中的强制类型转换(type cast)有显式和隐式两种。显式:直接用小括号强制类型转换,如:TYPE B = (TYPE)A;隐式:直接转换,如:float C = 1.5; int D = C;...原创 2020-03-12 11:07:59 · 314 阅读 · 0 评论 -
Win32编程一:Windows应用程序
Windows应用程序的类型 -控制台程序Console DOS程序,本身没有窗口,通过Windows DOS窗口执行 -窗口程序 拥有自己的窗口,可以与用户交互 -库程序 存放代码、数据的程序,执行文件可以从中取出来代码执行和获取数据 -静态库程序 扩展名LIB,在执行文件执行时从中获取代码 -动态库程序 ...转载 2019-05-30 14:21:21 · 8268 阅读 · 2 评论 -
Win32编程四:窗口类的注册
窗口类 窗口类包含了窗口的各种参数信息的数据结构。每个窗口都具有窗口类,基于窗口类创建窗口。每个窗口类都具有一个名称,使用前必须注册到系统。窗口类的分类 -系统窗口类 系统已经定义好的窗口类,所有应用程序都可以直接使用 -应用程序全局窗口类 由用户自己定义,当前应用程序的所有模块都可以使用容易产生冗余 -应用程序局部窗口类 由用户自己定义,当前应用程...转载 2019-05-30 14:19:45 · 730 阅读 · 0 评论 -
迭代器和指针的区别
迭代器:(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象,本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结...转载 2019-05-30 14:13:06 · 981 阅读 · 0 评论 -
C++中bool和BOOL的区别
一:在网上找到了BOOL和bool的区别:1、类型不同BOOL为int型bool为布尔型2、长度不同bool只有一个字节BOOL长度视实际环境来定,一般可认为是4个字节3、取值不同bool取值false和true,是0和1的区别BOOL取值FALSE和TRUE,是0和非0的区别二:bool是标准C++数据类型,转载 2015-03-17 18:06:05 · 739 阅读 · 0 评论 -
Win32编程二:编写窗口程序的步骤
编写窗口程序的步骤: 1 定义WinMain函数 2 定义窗口处理函数(处理消息) 3 注册窗口类 4 创建窗口(在内存中创建窗口) 5显示窗口(根据内存的数据将窗口绘制出来) 6消息循环(提取/翻译/派发)消息 7消息处理#include "windows.h"LRESULT WndProc(HWND hWnd,UINT nMsg,WPARAM...转载 2019-05-30 14:24:55 · 1899 阅读 · 0 评论 -
Win32编程五:Windows消息机制
Windows的消息机制 程序的执行机制 过程驱动-程序的执行过程是按照预定好的顺序执行 事件驱动-程序的执行是无序,用户根据需要随机触发相应的事件 Win32窗口程序就是采用时间驱动方式执行,也就是消息机制 什么是消息 当系统通知窗口工作时,就采用消息的方式派发(DispatchMessage来派发)给窗口的自定义的处理函数函数WNDCLASSEX...转载 2019-05-30 14:30:50 · 415 阅读 · 0 评论 -
笔试、面试重点总结:WIN32、MFC与Linux(持续更新中...)
win321. Win32应用程序的基本类型.2.创建win32窗口程序的几个步骤,及使用到的函数。3. nmake 与 makefile。4. 有哪些字符集? Win32对于各种字符集如何进行兼容及转换? (wchar_t、TCHAR、TEXT() )。5. 怎么创建一个子窗口?在哪进行设置?6. 窗口类的分类,如何创建一个应用程序全局窗口类。7. Win32窗口程...转载 2019-05-30 15:01:55 · 273 阅读 · 0 评论 -
C++内联函数解析
一、基本定义 inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。一般来说inline用...转载 2019-09-25 09:52:09 · 259 阅读 · 0 评论 -
Qt5 程序异常退出解决办法
新买的电脑,安装完Qt5,使用QtCreator创建工程,编译出现 查了好久,都说是Qt5遗留的bug,因为缺少dll文件导致的。然后把程序涉及的库文件都拷到工程下面,发现还是异常结束了。没办法找了个依赖文件分析工具:DependWalker; 下载链接:DependWalker运行dependency walker 缺少了QuaZip.dll和和ImageProcessing.dll文件,拷原创 2017-03-29 11:16:47 · 16822 阅读 · 5 评论 -
Win32编程三:win32创建窗口函数(windows程序内部运行机制)
利用win32创建窗口函数,主要操作步骤为:1、设计一个窗口类2、注册窗口类3、创建窗口4、显示及窗口更新5、消息循环6、窗口过程函数(1)设计一个窗口类设计窗口类,这样的类型已经被windows定义好了,我们只需要像选择题一样填满定义好的结构体(WNDCLASS)即可。首先有两个一般设为0的选项:cbClsExtra和cbWndExtra,这两个是类附加...转载 2019-05-30 14:10:07 · 1018 阅读 · 0 评论 -
C++多态的实现和原理
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚...转载 2019-05-22 14:10:50 · 112 阅读 · 0 评论 -
pos终端规范
在经过了一个多月的学习之后,我整理了一下POS规范前四章的一些知识点,以下就是我所整理出来的内容。一、管理功能1.系统管理 开机自检:硬件检测和自动报警、返回工作状态程序下载:串行口程序下载、联机应用程序下载参数管理:出厂参数、下发参数、可设定参数、可联机更改参数终端状态:正常工作状态、已签退状态、锁定状态 2.操作员管理 系统管理员:负责管理转载 2016-06-13 14:58:42 · 5145 阅读 · 0 评论 -
POS的数据包分析
在看了三个礼拜的基于PBOC2.0的POS规范后,今天来梳理一下这段时间的学习内容。由于规范里的内容比较多,这里就不讲那么仔细了,我打算在分析一份数据包的同时,穿插复习以前学过的知识。下图就是一份主机从网控器收到的消费数据包(用两位十六进制数表示一个字节)。 相信很多人第一次接触到这种数据元都会抹眼黑,啥也看不懂,我也是,说实话,我是听了我们技术总监的讲课后才明白这是怎么回事的转载 2016-06-13 14:54:39 · 2764 阅读 · 0 评论 -
Qt应用程序图标的个性化设置
在应用程序发布时,想要使exe文件可以有一个漂亮的图标。操作步骤如下:1.创建.ico文件。将ico图标文件复制到工程文件夹目录中,重命名为“myico.ico”。然后在该目录中右击,新建文本文档,并输入:IDI_ICON1 ICON DISCARDABLE "myico.ico"然后选择“文件->另存为”菜单项,将该文件命名为myico.rc,点击“保存”。原创 2015-11-10 23:27:51 · 403 阅读 · 0 评论