摘要:
防御性编程是提高软件质量技术的有益辅助手段,它的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。防御性编程关键在于严格的输入检查、预期的错误处理方法。下面介绍使用断言来进行防御性编程。断言通常是一个例程(routine)或一个宏(macros),断言通常包含有两个参数:布尔表达式和消息。布尔表达式的反面是一个错误,C标准库提供了一个assert宏,它只带有一个参数,如:assert(1==0);//注意布尔表达式不用加引号使用assert宏,需要包含头文件cassert或assert.h,执行上述语句的结果是程序结束运行,并弹出对话框显示出错信息。我们可以自定 阅读全文
摘要:
设备上下文DC是一个Windows数据结构,它包含了某个设备的绘制属性。通常,绘制调用都是借助于上下文对象,而这些设备上下文对象封装了用于画线、形状、文本等的Windows API。设备上下文是设备无关的,所以它既可以用于绘制屏幕,也可以用于绘制打印机甚至元文件。设备上下文在内存中创建,而内存经常受到扰动,所以它的地址是不固定的。因此,一个设备上下文句柄不是直接指向设备上下文对象,而是指向另外一个跟踪设备上下文地址的指针。设备上下文可分为4种:1)显示设备上下文主要用于显示设备上的绘制操作,当应用绘制客户区时,它需要调用BeginPaint、GetDC或GetDCEx函数获取显示设备上下文。绘 阅读全文
摘要:
题目:编写一个单词逆序输出的算法,例如输入“SEE YOU IN ANOTHER LIFE”,要求输出“LIFE ANOTHER IN YOU SEE”。解答:解法一:只需扫描一遍:#include <iostream> void ReverseWord(const char* src, char* dest){ assert(src != NULL && dest != NULL); const char* head = src; //记住头指针 while(*src++); int count = 0; for(src -= 2;;src--) //从尾到头遍历 阅读全文
摘要:
void CUpDownClient::ConnectionEstablished():emule中, CUpDownClient 代表了一个peer。一个peer会被放置到各种队列中去。比如,还未连接的peer被放入到待连接队列中。其它队列中保存的是peer的指针,这样可以节省内存。函数ConnectionEstablished()其意思很明显:连接建立后调用。一个peer连接后,需要做什么呢?1 从connecting队列中删除。2 如果本emule还未获取到自己的公网IP,则通过这个peer获取自己的公网IP。3 更新peer在kad网络中的状态。4 如果正在与这个peer聊天,则更新这 阅读全文
摘要:
一个将WM_*消息代码转换为字符串表示的函数:(打表法)#include <windows.h>struct WMArray { UINT Code; char Message[100];} waWMArray[] = { {0x0000, "WM_NULL"},{0x0001, "WM_CREATE"},{0x0002, "WM_DESTROY"},{0x0003, "WM_MOVE"}, {0x0005, "WM_SIZE"},{0x0006, "WM_ACTIVATE 阅读全文
摘要:
一个简单的进程封装类,该类允许我们新建一个远程进程,并对其进行控制。进程类CProcess的头文件如下:class CProcess{ public: PROCESS_INFORMATION ProcessInfo; //进程结构信息 STARTUPINFO StartupInfo; //启动信息 bool KillProcess(UINT); //强制杀死进程,不推荐 bool KillThread(UINT); //强制杀死线程,不推荐 bool LoadProcess(char *, char *, char *); //创建远程进程 bool Pause(void); //挂起主线程 阅读全文
摘要:
DIV箭头用于表现DIV内容的指向,是使用非常普遍的一种表现形式,例如新浪微博的消息转发: 还有傲游网站的导航条: 像傲游账户上方这种箭头更需要多幅图片以表现箭头和hover的效果。传统的实现方式都需要一副表示箭头的图片放在DIV上方来实现,例如新浪微博的相关CSS如下: 而使用CSS3的特性,我们不需要图片就可以实现更加华丽的效果,这样做的好处还包括减少本地文件系统的读取、节省服务器带宽和连接数、避免文件下载失败带来的错误等等。 实现的原理是:我们可以将箭头看作是一个矩形或者菱形的一个角,使用CSS3的属性transform来实现矩形的旋转。 朝上的箭头需要将矩形旋转45度,我们使用tra. 阅读全文
摘要:
一段简单的动态改变数组大小的代码,给初学者看看,详见代码:#include <iostream>class Int_array{ static int no_instances; //数组的实例个数 int size; int len; int *array; //数组指针public: Int_array(int); Int_array(const Int_array&); int &retrieve(int); //索引元素 int no_instance(); void Display(); int length(); void Add(int); void 阅读全文
摘要:
##########################################################################ASCE1885的声明:本文源代码归属于:author: Gonzales Ceneliahomepage: www.ai-search.4t.com有增改!##########################################################################本代码实现二分查找的功能,查找前对数组排序使用的是冒泡排序算法。使用的开发环境是Dev C++ 4.9.9.2。程序头文件是bisearch.h, 阅读全文
摘要:
使用IOCP的TCP服务器使用过程大体如下:1) 使用CreateIoCompletionPort函数创建完成端口,并以该I/O完成端口为参数创建多个服务线程;2) 创建监听套接字;3) 接收客户端连接请求,返回服务套接字;4) 将服务套接字与完成端口绑定,并在该套接字上投递初始I/O操作请求;5) 返回步骤3);服务线程的流程如下:1) 调用GetQueuedCompletionPort函数等待获取完成信息;2) 根据需要对数据进行处理并投递后续的I/O操作请求;3) 返回步骤1)。程序代码及注释如下:#include <stdio.h>#include <winsock2 阅读全文