- 博客(17)
- 资源 (20)
- 收藏
- 关注
转载 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 22071 1
转载 C,C++宏中#与##的讲解
文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello";
2015-12-23 16:57:32 676
转载 使用OutputDebugString帮助调试
前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugString函数,通过它,可以在在DEBUG或RELEASE情况也可以输出调试日志,从而对那些要求编译为RELEASE的程序可以方便的调试。OutputDebugString的函数原型:void OutputDebugString(
2015-12-23 16:54:04 1858
原创 SendMessageTimeOut函数你使用过吗?
在WINDOW编程中,发送消息是很正常的事情,发送消息的常用API有SendMessage,PostMessage,PostThreadMessage。一般每个线程有两个队列,一个用来接受通过Send函数的消息,另外一个队列接收通过Post接收的消息。该两个函数的基本区别是,一个函数需要等待返回的,相当于函数调用,这个是SendMessage;另外一个是将消息放到对方的队列中直接返回。使用Post
2015-12-23 16:51:50 3954
转载 线程分离的定时器一点经验
说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM_MOUSEMOVE消息都会影响整个动画的效果。 这时我就考虑,是否能给定时器创建一个单独的线程,接着就发现了“多媒体定时器”这个东西。它是一个高精确度定时器,一般的Windows定时器只能
2015-12-21 15:22:03 1310
原创 获得MFC窗口其它类指针的方法
获得CWinApp:-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp-在其它类中只能用AfxGetApp()获得CMainFrame:-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd-在CChildFrame中可用GetParentFrame()-在其它类中用AfxG
2015-12-16 17:42:32 848
转载 排序方法的比较
首先给出各个排序方式的性能比较:排序方法的比较类别排序方法时间复杂度空间复杂度稳定性平均情况最好情况最坏情况辅助存储插入排序直接插入O(n2)
2015-12-14 10:52:55 1179
转载 排序方法的比较
首先给出各个排序方式的性能比较:排序方法的比较类别排序方法时间复杂度空间复杂度稳定性平均情况最好情况最坏情况辅助存储插入排序直接插入O(n2)
2015-12-14 10:43:13 270
转载 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 4620
转载 写一个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 855
转载 人人都该了解的十大算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策
2015-12-09 14:12:15 1407
转载 面向对象六大原则
目录(?)[-]优化代码的第一步单一职责原则让程序更稳定更灵活开闭原则构建扩展性更好的系统里氏替换原则让项目拥有变化的能力依赖倒置原则系统有更高的灵活性接口隔离原则更好的可扩展性迪米特原则总结本文出自《Android源码设计模式解析与实战》中的第一章。 1、优化代码的第一步——单一职责原则单一职责原则的英文名称是Single Responsibili
2015-12-09 14:08:49 1157
转载 正确使用std::auto_ptr
1, auto_ptr类auto_ptr是一个模板类,定义如下:template typename Type>class auto_ptr {...};它存储的是一个指向Type的指针。顾名思义,auto_ptr是一种智能指针,它包含一个动态分配内存的指针,并在它生命周期结束的时候,销毁包含的指针所指向的内存。例1:
2015-12-03 08:59:12 660
转载 正确使用std::auto_ptr
1, auto_ptr类auto_ptr是一个模板类,定义如下:template typename Type>class auto_ptr {...};它存储的是一个指向Type的指针。顾名思义,auto_ptr是一种智能指针,它包含一个动态分配内存的指针,并在它生命周期结束的时候,销毁包含的指针所指向的内存。例1
2015-12-03 08:50:03 459
原创 C++新特性:deprecated关键字
对大多数程序员来说,代码陈旧是个大问题。这个新属性提供了解决这个问题的系统方法。在C++14中,增加关键字:deprecated,主要用于管理过时的函数、接口、类等。它的用法方便又简单—只需要把[[deprecated]]标签放到声明的前面即可—可以是类,变量,函数,或者其他一些实体的声明。结果看起来像这样:class[[deprecated]] fla
2015-12-02 16:11:05 14990
转载 boost::enable_if与SFINAE原则
模板函数的重载遵循SFINAE原则(substitution-failure-is-not-an-error):当一个模板函数的返回值或参数类型无效的时候,该实例不会参与重载解析,也不会导致编译错误。利用这个原则,可以设计出具有选择性的模板函数。先看一个例子:int negate(int i) { return -i; }
2015-12-02 15:42:41 1404
转载 STL remove和erase
remove 算法描述:查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回"指向最后一个 '有用' 元素的iterator",但是在remove算法过程中,并没有修改原容器的size,以及end()。但是从逻辑角度看,最后的[
2015-12-02 14:44:37 597
线程间通信方式3:消息传递方式
2013-01-18
不使用MFC类库而使用CRT标准库函数获取日期时间的简单方法演示
2013-01-09
MFC创建用户界面线程方法2
2013-01-04
采用_beginthreadex创建多线程
2012-12-19
多线程同步演示(采用CreateThread()和WaitForMultipleObjects()函数)
2012-12-10
多线程与单线程的对比(采用CreateThread)
2012-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人