转载文章
文章平均质量分 83
cbNotes
这个作者很懒,什么都没留下…
展开
-
#pragma pack 用法详解
pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项(属性 -> 配置属性 -> C/C++ ->代码生成 -> 结构成员对齐)的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元. 1. #pragma pack(show) 以警告信息的形式显示当前字节对齐的值.2. #pragma pack(n)转载 2017-07-20 10:17:55 · 2059 阅读 · 0 评论 -
C,C++宏中#与##的讲解
文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello";转载 2015-12-23 16:57:32 · 689 阅读 · 0 评论 -
使用OutputDebugString帮助调试
前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugString函数,通过它,可以在在DEBUG或RELEASE情况也可以输出调试日志,从而对那些要求编译为RELEASE的程序可以方便的调试。OutputDebugString的函数原型:void OutputDebugString(转载 2015-12-23 16:54:04 · 1873 阅读 · 0 评论 -
SendMessageTimeOut函数你使用过吗?
在WINDOW编程中,发送消息是很正常的事情,发送消息的常用API有SendMessage,PostMessage,PostThreadMessage。一般每个线程有两个队列,一个用来接受通过Send函数的消息,另外一个队列接收通过Post接收的消息。该两个函数的基本区别是,一个函数需要等待返回的,相当于函数调用,这个是SendMessage;另外一个是将消息放到对方的队列中直接返回。使用Post原创 2015-12-23 16:51:50 · 3974 阅读 · 0 评论 -
线程分离的定时器一点经验
说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM_MOUSEMOVE消息都会影响整个动画的效果。 这时我就考虑,是否能给定时器创建一个单独的线程,接着就发现了“多媒体定时器”这个东西。它是一个高精确度定时器,一般的Windows定时器只能转载 2015-12-21 15:22:03 · 1328 阅读 · 0 评论 -
C++: std::string 与 Unicode 如何结合?
C++: std::string 与 Unicode 如何结合? 一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单。基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于_UNICODE 的值: 1: // abridged from tchar.h 2: 3: #ifdef _UNICODE 4: 5: typ转载 2016-01-19 17:58:57 · 4795 阅读 · 0 评论 -
内存分配及清空、调试 几种方法的总结
1. 存分配的三个方法:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)转载 2016-01-19 17:56:23 · 8070 阅读 · 0 评论 -
C/C++语言字符串操作总结大全(超详细)
字符串操作strcpy(p, p1) 复制字符串strncpy(p, p1, n) 复制指定长度字符串strcat(p, p1) 附加字符串strncat(p, p1, n) 附加指定长度字符串strlen(p) 取字符串长度strcmp(p, p1) 比较字符串strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度转载 2015-12-14 10:36:53 · 4637 阅读 · 0 评论 -
排序方法的比较
首先给出各个排序方式的性能比较:排序方法的比较类别排序方法时间复杂度空间复杂度稳定性平均情况最好情况最坏情况辅助存储插入排序直接插入O(n2)转载 2015-12-14 10:52:55 · 1195 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
#include#define f(a,b) a##b#define g(a) #a#define h(a) g(a)int main(){ printf("%s\n",h(f(1,2))); printf("%s\n",g(f(1,2))); return 0;}在宏定义里,a##b就是把a,b联接起来,比如f(1,2)就是12,但是是数。#a就是把a转化成字串转载 2015-12-23 16:59:30 · 22189 阅读 · 1 评论 -
面向对象六大原则
目录(?)[-]优化代码的第一步单一职责原则让程序更稳定更灵活开闭原则构建扩展性更好的系统里氏替换原则让项目拥有变化的能力依赖倒置原则系统有更高的灵活性接口隔离原则更好的可扩展性迪米特原则总结本文出自《Android源码设计模式解析与实战》中的第一章。 1、优化代码的第一步——单一职责原则单一职责原则的英文名称是Single Responsibili转载 2015-12-09 14:08:49 · 1171 阅读 · 0 评论 -
const 详解
零、文章来由打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。一、从 文字常量和常变量 开始1、文字常量程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量。他们是 静态数组名、枚举变量、全局(静态变量)首地址、#define定转载 2016-03-08 18:28:28 · 1471 阅读 · 0 评论 -
VS2010远程调试环境详细配置(Windows用户验证)
远程调试说明:Windows远程调试有两种连接方式:无验证,Windows用户验证。两种调试方式:Attach to process, 直接调试。这里介绍的是Windows用户验证下的直接调试方式。1、首先说明准备工作:(1)关闭两台机器防火墙。(2)两台机器在同一局域网之内,并且需要相互可以ping通。(3)由于是使用Windows验证方式,所以要求两台机转载 2016-10-14 09:45:54 · 4484 阅读 · 0 评论 -
判断一个点是否在多边形区域内
/*函数的输入:(1)当前点的坐标p(2)区域顶点数组pt[];(3)顶点数nCount 输出: 在区域内返回TRUE,否则返回FALSE。 Point类型是一个结构: struct Point { 类型 x;//此处类型根据采用的经纬度类型决定。 类型 y; };*/BOOL PtInPolygon(Point p, Poin转载 2016-08-26 09:34:50 · 809 阅读 · 0 评论 -
判断点是否在多边型内
最近不断遇到类似的几何位置问题,一直没有花时间去总结,本文总结了我常用点跟多边形的位置判断方法以及代码。希望能够对大家有所帮助。文中所指的多边形均为凸多边形,一些描述可能有误,欢迎指正。1.测试的多边形在开始之前,我们需要先构建好测试环境。我构建了一个比较特殊的多边形,如下。/ \| ||_|从最上面的顶点顺时针坐标(屏幕坐标系)分转载 2016-08-26 09:32:25 · 801 阅读 · 0 评论 -
注册表编程
一、注册表基础1.1注册表历史背景什么是注册表?我们可以把注册表理解成一种数据库,里面保存着各种数据,如:系统的配置信息,桌面环境,系统软件,IE浏览器等等软件的信息。在微软以前发布的操作系统中(如windows 3.X),把这些信息保存在System.ini,Win.ini等文件中,随着数据量越来越大,越来越复杂,这样ini文件难以胜任,从windows 95开始引入注册表来保存这些复杂转载 2016-08-26 09:30:34 · 591 阅读 · 0 评论 -
串口通信编程--多线程异步方式
目录一串口通信基础 1.1串口通信原理与特点 1.2串口通信的传输方式 1.3串口通信的同步技术 1.4串行接口标准 二 API函数实现串口通信 2.1打开串口 2.1.1串口是否有驱动 2.1.2连接串口 2.1.3串口逻辑端口号大于10无法打开问题 2.2串口配置 2.2.1设置缓冲区大小转载 2016-08-26 09:22:25 · 1713 阅读 · 0 评论 -
防止CListCtrl 闪烁的几种方法
一:彻底解决了CListCtrl的闪烁问题.此灵感来自于WindowMediaPlayer SDK 9方法很简单.如下:在对话框上加了个静态文本框.并把文本框的样式设为透明.再用SetParent()函数把CListCtrl的父窗口设为刚加的静态文本框.嘿嘿彻底不闪了...代码如下:1在CMyDlg中添加成员 CListCtrl m_List;2BOOL CM转载 2016-05-16 17:12:26 · 2162 阅读 · 0 评论 -
win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较:16位平台char 1个字节8位short 2个字节16位int 2个字节16位long 4个字节32位指针 2个字节32位平台转载 2016-03-21 17:43:22 · 1965 阅读 · 0 评论 -
C/C++面试常见的几个库函数详解(strcpy,memcpy,memset,atoi...)
前言在面试中,常常会被问到几个库函数的实现,虽然代码很短,涉及的细节却特别多,因此特别受面试官青睐,所以要把他们熟记于心,方能应对自如。strcpy()原型声明:char strcpy(char dest, const char *src); 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以转载 2016-03-08 18:55:29 · 1327 阅读 · 0 评论 -
写一个memcpy()函数你能拿几分?
不考虑性能的话,memcpy()在C99编译器下可以写为:void *memcpy(void *restrict dest, const void *restrict src, size_t n){ int i; const char *s = src; char *d = dest; assert(dest && src);转载 2015-12-09 14:52:07 · 868 阅读 · 0 评论 -
人人都该了解的十大算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策转载 2015-12-09 14:12:15 · 1421 阅读 · 0 评论 -
函数调用约定解析
tag:汇编,pascal,fastcall,stdcall,thiscall,cdecl,调用约定,函数调用约定,返回值传递方式摘要:文章讲述了几种主要程序语言中的函数调用约定;详细说明时主要以VC6中的函数调用约定为主,阐释方式主要是以C++程序编译后得到的汇编代码来进行说明;文章来源于abp论坛中的一篇帖子:http://bbs.allaboutprogram.com/vie转载 2014-08-26 11:36:18 · 931 阅读 · 0 评论 -
并行计算简介和多核CPU编程Demo
tag:多线程,并行计算,OpenMP,多核编程,工作线程池( 2008.01.19 更新 鉴于读者反映代码阅读困难,重新改写了文章和实现,使文章更易读 )( 2007.09.04 更新 把用事件控制的线程启动更新为临界区的实现 ) 2006年是双核的普及年,双核处理器出货量开始超过单核处理器出货量;2006年的11月份Intel开始供货4核;AMD今年也将发转载 2014-08-26 11:18:21 · 5444 阅读 · 0 评论 -
C++类型转换符使用详解
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和 const_cast。下面对它们一一进行介绍。I.st原创 2014-08-22 12:01:37 · 2275 阅读 · 0 评论 -
可变参数个数的函数
1可变参数个数的函数1、可变参数函数的原型声明:typeVAFunction(typearg1,typearg2,…);参数可以分为两部分:个数确定的固定参数和个数可变的可选参数。函数至少需要一个固定参数,固定参数的声明和普通函数一样;可选参数由于个数不确定,声明时用"..."表示。固定参数和可选参数公同构成一个函数的参数列表。2、相关宏 转载 2014-08-22 17:23:50 · 1536 阅读 · 0 评论 -
详解C语言可变参数va_list和vsnprintf及printf实现
C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢?这里我们一起来挖掘一下C语言变长参数的奥秘。先考虑这样一个问题:如果我们不使用C标准库(libc)中提供的Facilities,我们自己是否可以实现拥有变长参数的函数呢?我们不妨试试。一转载 2014-08-22 17:50:05 · 12039 阅读 · 0 评论 -
可变长参数函数(变参函数) 技术分析~
在C语言中,函数参数的传递方式有值传和址传.值传是把实参的一个专用的、临时的复制值给被调函数中相应的形参被调用函数使用、修改这个传来的复制值,不会影响实参的值.址传则是把变量(实参)的地址传给被调函数.被调函数通过这个地址找到该变量的存放位置,直接对该地址中存放的变量的内容进行存取操作.因此,在被调用函数中可以修改实参的值.这也是函数参数址传的优点.无论是值传还是址传,都要求实参的数目及类型与形参转载 2014-08-22 17:41:43 · 1848 阅读 · 0 评论 -
如何实现参数个数可变的函数
如何实现参数个数可变的函数参数个数不定的函数,最频繁使用的就是printf()与scanf()。其实,我们也可以自己实现这样的功能,首先看一个例子:#include#includeint Sum(intfirst, int second, ...){ int sum = 0, t = first; va_list vl; va_star转载 2014-08-22 17:47:20 · 1927 阅读 · 0 评论 -
sqlite3自增key设定(创建自增字段)
在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由sqlite引擎来维护的,在3.0以前rowid是32位的整数,3.0以后是 64位的整数,为什么不直接使用这个内部的rowid作为每个表的id主键呢。相关的文档在这里:?http://www.原创 2014-08-20 12:04:03 · 3759 阅读 · 0 评论 -
改变ListCtrl某行的背景色或者字体颜色
大家也许熟悉WM_NOTIFY,控件通过WM_NOTIFY向父窗口发送消息。在WM_NOTIFY消息体中,部分控件会发送NM_CUSTOMDRAW告诉父窗口自己需要绘图。也可以反射NM_CUSTOMDRAW消息,如:ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) //需要自己加进去afx_msg void OnCustomDra转载 2014-08-28 10:51:04 · 6051 阅读 · 1 评论 -
Windows界面——使用Custom Draw优雅的实现ListCtrl的重绘
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和究竟这个特性有什么好处。 Custom draw可以被想象成一个轻量级的,容易使用的重绘方法(重绘方法还有几种,例如Owner Draw等)。这种容易来自于我们只需要处理一个消息(NM转载 2014-08-28 10:58:54 · 3312 阅读 · 0 评论 -
深入理解C++浮点数(float、double)类型数据比较、相等判断
浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。1、将字符串转换为float、double过程存在转载 2014-08-29 10:12:51 · 34059 阅读 · 2 评论 -
MySQL的timestamp类型自动更新问题
注:本文讨论的范围为未启用MAXDB模式的表! 今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新。岂知对这个类型的值还不甚了解,导致出错。发现这个字段只是在这行数据建立的时候有值,在更新的却无变化。 查找资料,发现是我建表的语句有问题: 以下是代码片段:CREATE TABLE转载 2015-03-06 11:48:27 · 1277 阅读 · 0 评论 -
VC 枚举串口四法
串口作为最基本的电脑通信 I/O 接口,其使用虽然在 PC 上越来越少,但是在工业仪器领域仍然用的相当普遍,由于笔者工作中需要用到串口,而且发现枚举串口至今仍未搞得很清楚,为此自己先整理下,希望大侠和同行们对我不懂和错误的地方指点一下。 1 、查询注册表查询注册表的方法是网上见到的比较常见的方法,该方法就是使用编程方法读取注册表内信息,相当于用户通过在运行框内输入 ”reg转载 2015-01-21 15:46:23 · 4229 阅读 · 0 评论 -
使用SetUnhandledExceptionFilter让程序优雅的崩溃
虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩溃的,也可以做额外的操作,但是这样是没办法把默认的发送错误的对话框去掉的。转载 2014-12-29 11:00:12 · 5097 阅读 · 1 评论 -
MFC多线程中创建对话框(create)出错(异常)问题的分析及解决办法
在修改单线程MFC程序为多线程时,遇到了CWnd::AssertValid()函数执行出错问题。主要表现是在执行下面代码中绿色语句时出错点击(此处)折叠或打开#ifdef _DEBUGvoid CWnd::AssertValid() const{ if (m_hWnd == NULL) return;转载 2014-12-24 15:57:43 · 7982 阅读 · 0 评论 -
VC 文档+视图 详细分析
目录(?)[-]深入浅出MFC文档视图架构之基本概念深入浅出MFC文档视图架构之文档模板深入浅出MFC文档视图架构之文档深入浅出MFC文档视图架构之视图深入浅出MFC文档视图架构之框架深入浅出MFC文档视图架构之相互关系深入浅出MFC文档视图架构之实例剖析深入浅出MFC文档/视图架构之基本概念 引言 MFC引入了"文档转载 2015-01-28 18:06:40 · 12135 阅读 · 1 评论 -
MFC几个关于字符串处理的全局函数
最近在使用字符资源的时候,发现有几个全局函数处理字符串非常方便。函数头 void AFXAPI AfxFormatString1(CString& rString, UINT nIDS, LPCTSTR lpsz1);函数功能 从资源文件里读取指定ID(nIDS)的资源字符串,并用字符串(lpsz1)替换资源字符串中出现的”%1”,假如”%1”出现多次,则多次替换。函数 void转载 2014-09-30 14:25:52 · 1707 阅读 · 0 评论 -
迭代器的分类
1、输入迭代器:只读,一次传递 为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越末尾的值。总是,输入迭代器可以对读操作的结果进行解析(对每个值仅解析一次),然后向前移动。 2、输出迭代器:只写转载 2014-10-08 14:10:35 · 900 阅读 · 0 评论