
C++
文章平均质量分 71
阿凉Wlv
这个作者很懒,什么都没留下…
展开
-
函数调用约定 stdcall, cdecl
论函数调用约定 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result =function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就转载 2009-03-09 17:03:00 · 699 阅读 · 0 评论 -
内联函数与宏的区别
内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你原创 2009-03-25 10:57:00 · 1162 阅读 · 0 评论 -
同步机制摘要
Critical section(临界区)用来实现“排他性占有”。适用范围是单一进程的各线程之间。它是: 一个局部性对象,不是一个核心对象。 快速而有效率。 不能够同时有一个以上的critical section被等待。 无法侦测是否已被某个线程放弃。 Mutex Mutex是一个核心对象,可以在不同的线程之间实现“排他性占有”,甚至即使那些线程分属不同进程。它是: 一个核心对象 如果拥有M原创 2009-03-25 10:59:00 · 694 阅读 · 0 评论 -
如何使类不能被继承
如果大家熟悉java的话应该知道java中有一种类不能被继承,那就是final类.这种类有很多用处,尤其是在大的项目中控制类的继承层次.使子类数量不至于爆炸.在使用了多继承的类层次中这也是防止出现菱形继承层次结构的一个好办法. 要实现一个不能被继承的类有很多方法. 如何使类不能被继承呢?主要的思路就是使子类不能构造父类的部分,这样子类就没有办法实例化整个子类.这样就限制了子类的继承原创 2009-03-25 11:00:00 · 987 阅读 · 1 评论 -
CEdit的自动滚动
1. CEdit 设置为MultiLine 变量名称为 CEdit m_GPSInfo 2.Auto VScroll 3. m_GPSInfo.SetRedraw(FALSE);//防止闪烁 int nLength = m_GPSInfo.SendMessage(WM_GETTEXTLENGTH); if (nLength > 10240) m_GPSInfo.Clear();原创 2009-03-25 11:04:00 · 2713 阅读 · 0 评论 -
用 C++ 创建简单的 Win32 服务程序
摘要 本文描述如何用 Visual C++ 创建 Windows NT 服务程序。创建该服务仅用到一个C++类,这个类提供服务与操作系统之间一个简单的接口。使用这个类实现自己的服务非常简单,只要改写少数几个基类中的虚拟函数即可。在本文有三个源代码参考例子: NTService 是一个简单的 Win32 服务,它就是用本文所描述的方法建立的; NTServCpl 是一个控制面版程原创 2009-03-25 11:05:00 · 1119 阅读 · 0 评论 -
WinDbg调试程序
什么是WinDBG? WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由于大部分程序员不需要做Kernel模式调试,我在这篇文章中不会介绍Kernel模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读InsideWindows 2000和Windbg所带的帮助文原创 2009-03-25 11:06:00 · 990 阅读 · 0 评论 -
常见排序算法
冒泡排序,插入排序,shell排序,快速排序,堆排序等。现在把代码帖出来,大家瞅瞅。// Sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define MAX 10void GetRandom(int a[],int n){ for (int i=0; i { a=rand()%(2*n); }}void Print(原创 2009-03-25 11:15:00 · 631 阅读 · 0 评论 -
VC下发布的Release版程序的异常捕捉
寻找Release版程发生异常退出的地方比Debug版麻烦得多。发生异常的时候windows通常会弹出一个错误对话框,点击详细信息,我们能获得出错的地址和大概的出错信息,然后可以用以下办法分析我们的程序。 一. 用MAP文件定位异常代码位置。1.如何生成map文件打开“Project →Project Settings”,选择 C/C++ 选项卡,在“Debug Info”栏选择转载 2009-08-07 15:08:00 · 5253 阅读 · 0 评论 -
Const,Const函数,Const变量,函数后面的Const (zz)
<br /><br />看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。<br />const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need”。<br />转载 2011-02-17 14:54:00 · 716 阅读 · 0 评论 -
指针与引用的区别
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指原创 2009-03-25 10:57:00 · 597 阅读 · 0 评论 -
memcpy
void* mymemcpy(void *dst,void *src,size_t count) { char *tmp, *s;/*如果目标地址小于源地址的话,从头开始拷贝*/ if (dest tmp = (char *) dest; s = (char *) src; while (count--) *tmp++ =原创 2009-03-25 10:50:00 · 2262 阅读 · 0 评论 -
COM学习....
COM初始化if (CoInitialize(NULL) != S_OK) {return 1;}CoUninitialize();COM库的内存管理由于COM组件与客户程序,COM库三者之间内存交互(分配和释放可能不在同一个模块),所以必须使用一致的内在管理器。COM提供的内在管理器标准:class IMalloc:public IUnknow{ void* Al原创 2009-03-24 14:54:00 · 897 阅读 · 0 评论 -
Makefile
Makefile学习教程: 跟我一起写 Makefile0 Makefile概述0.1 关于程序的编译和链接1 Makefile 介绍1.1 Makefile的规则1.2 一个示例1.3 make是如何工作的1.4 makefile中使用变量1.5 让make自动推导1.6 另类风格的makefile1.7 清空目标文件的规则2 Makefile转载 2009-03-25 10:14:00 · 818 阅读 · 0 评论 -
if 语句
4.3.1 布尔变量与零值比较 z 【规则 4-3-1】不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。 根据布尔类型的语义,零值为“假” (记为 FALSE) ,任何非零值都是“真” (记为TRUE) 。TRUE 的值究竟是什么并没有统一的标准。例如 Visual C++ 将 TRUE 定义为1,而 Visual Basic 则将 TRUE 定义为-1。 假设布尔变量名原创 2009-03-25 10:31:00 · 528 阅读 · 0 评论 -
Debug 和 Release
Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而Release版本需要MFC42.DLL支持。Release Build不对源代码进行调试,不考虑MFC原创 2009-03-25 10:32:00 · 682 阅读 · 0 评论 -
多线程事件等待
多个线程等待一个事件时,自动重置事件:只有一个线程变为可调度状态手动重置事件:多个线程变为可调度状态原创 2009-03-25 10:33:00 · 686 阅读 · 0 评论 -
Windows消息大全
Windows消息目录1. WM_NULL=$0000:2. WM_CREATE=$0001: 应用程序创建一个窗口3. WM_DESTROY=$0002: 一个窗口被销毁4. WM_MOVE=$0003: 移动一个窗口5. WM_SIZE=$0005:改变一个窗口的大小6. WM_ACTIVATE=$0006: 一个窗口被激活或失去激活状态;7. WM_SETFOCUS=$0007原创 2009-03-25 10:35:00 · 621 阅读 · 0 评论 -
class存储空间,字节对齐
首先: 以下所有试验在32位机,VC.Net2003上运行。 class的存储空间有四点需要注意。 1。默认情况下以最大储存空间变量对齐。double-8,int-4,char-1,short-2,float-4,指针-4,虚函数-4,其实虚函数就是一个指针。以最大的对齐。存储空间必须是要对齐的字节个数的整数倍。 2。变量及虚函数的存储位置首地址必须是自身所占字节个数的整数倍。 3。可以使用原创 2009-03-25 10:37:00 · 1154 阅读 · 0 评论 -
C++的四种类型转换
在C中进行强制类型转换,直接()就可以了。在c++中,提供了四种类型转换,static_cast、dynamic_cast、reinterp_cast、const_cast。当然,如果你要用()强转也行,c++是兼容c的。关于这四种转换,网上有介绍很仔细很详细的。我这里只想简单的介绍其常用的规则。这些东西大多都用在转换指针上。static_cast 快速的类型转换,如果可以转换则一定原创 2009-03-25 10:46:00 · 1146 阅读 · 0 评论 -
获取最大重复子串
static int length = 1; //记录重复最长的子串长度vector > gVvec; //记录重复最长的子串 /* 得到一个字符重复的各个集合*/vector > getOneCharSameSet(const string& str){ //找一个字符重复时利用直接哈希,对质数取模(131包含所有assici字符范围) vector > vvec; f原创 2009-03-25 10:49:00 · 784 阅读 · 0 评论 -
VS2015插件推荐
1.Visual Assist 就不说了。目前2076可用有破解2.Refactoring Essentials是一款用于代码分析和重构的开源免费VS2015插件,其功能丰富强大,必然会成为类似Web Essentials这样的必备插件。因为它具有如下重构功能(http://vsrefactoringessentials.com/Features/Refactorings-CS转载 2015-11-09 10:59:12 · 21540 阅读 · 1 评论