Google最近开源了其基于xUnit的C++单元测试框架。项目开发者Zhanyong Wan说在Google内部已经有数以千计的C++开发者在使用该框架,并且已经持续好几年了。
根据Google所述,此次发布的主要亮点体现在:
Google Test是便携式的:它可以通过不同版本的GCC和MSVC编译器应用在多种平台上(Linux、Windows、Mac OS X等等)。你甚至可以将它用于Windows CE和Symbian这样的嵌入式系统中。很多平台的构建工具和测试运行器都处在开发当中,并且现在已经有Linux的Autotools支持了。
支持fatal和nonfatal断言。在nonfatal失败后测试还会继续。这使得在一次单独的编辑——编译——测试周期中能发现并修复更多问题。
对常见的测试需求提供很多断言,同时你也可以轻松地对不常见的情况定义新的断言。
在Linux上,你可以编写death tests以确保你的代码在遇到期望的错误时崩溃。
因为该框架基于流行的xUnit架构,所以如果你以前使用过该家族中的任何一个测试框架,那么就很容易掌握它。阅读全文>
发表于 @ 2008年07月25日 22:42:00|评论(loading...)|编辑|收藏
int RemoveSpace(char * target)
{
int iLen ;
int i,j;
if (!target) return false;
iLen = strlen(target);
for (i =0,j = 0; j < iLen; ) {
if (target[j] != ' ') {
target[i] = target[j];
++i;
}
++j;
}
return succe;
}阅读全文>
发表于 @ 2008年07月21日 22:51:00|评论(loading...)|编辑|收藏
Adobe的Scott Petersen上周在Mozilla谈论了他创造的工具链(Toolchain)——不久后将开源——可以让C代码跑在Tamarin虚拟机上(相关中文描述)。工具链包含了许多其它方面的细节,如一个定制的POSIX系统调用API和C多媒体库,让程序运行在flash上。Petersen设计一个特别的byte array去直接贴图到RAM,因此降低模拟时的耗损并提升效率,可以让游戏之类的应用跑起来飞快。这样做的好处能在flash中以可接受的速度执行任何基于C的代码,如php、ruby、perl、python甚至java与objective-c。Petersen演示了一个flash版的Quake 游戏,以及在一个基于C的任天堂模拟器上跑Zelda,两者都完全可以玩,包括了音效和音乐。阅读全文>
发表于 @ 2008年07月10日 22:50:00|评论(loading...)|编辑|收藏
大家都知道,对于位于当前调试目标中的指令,可以使用WinDBG的u命令进行反汇编。u命令的参数是要反汇编代码的地址值或者符号,如果不指定,那么WinDBG会使用当前程序指针寄存器所指向的代码,例如:
0:001> u
ntdll!DbgBreakPoint:
7c901230 cc int 3
7c901231 c3 ret
如果要想将汇编指令翻译为机器码,那么应该使用a命令,a命令使用的参数格式与u命令相同,只不过参数的含义代表的是要产生的机器码要存放的起始地 址。例如执行a 0x400000命令后,WinDBG会启动交互式编辑提示符(Input>),而后便可以输入汇编指令,没输入一条后,按回车,然后可以继续输入 下一条,结束时直接按回车。
举个实际的例子,启动记事本程序,然后将WinDBG附加上去,此时执行u命令看到的就是上面的反汇编结果,也就是EIP指向的是ntdll中的 DbgBreakPoint函数,这个函数只有两条指令。接下来执行a命令,在Input提示符后输入nop然后按回车,阅读全文>
发表于 @ 2008年07月08日 23:47:00|评论(loading...)|编辑|收藏
最近真的很郁闷。作为一个学习计算机和c++的人,听到这句话之后,真的陷入了深深的迷茫之中,想到这里和大家一起讨论一下。 阅读全文>
发表于 @ 2008年06月19日 23:27:00|评论(loading...)|编辑|收藏
本文的目的并非是想挑起语言之争,而是希望通过客观地分析每一种主流语言的能力,辨明其长短,让程序员能够扬长避短,有效地使用各种语言。让各种语言能够各安其位,为你更好的服务。
程序员应当成为语言的主人,而不是语言的奴隶。
阅读全文>
发表于 @ 2008年06月10日 21:57:00|评论(loading...)|编辑|收藏
像所有的新手一样,对一种算法思想的理解需要经历从肤浅(流于表面形式)到逐渐触摸到本质的过程。为什么说"逐渐"触摸到本质,是因为很多时候你并不确定一个解释是不是最本质的,有时候会有好几个等价的解释,各自在不同的场景下具有启发。
比如对动态规划(DP)的理解,一开始我理解为"递推",但实际上这是最肤浅的理解,对于如何在特定的问题中找到递推关系毫无帮助和启发。换言之,这只是一个描述性的总结,而不是一个建设性的总结,不含方法论。
阅读全文>
发表于 @ 2008年06月07日 00:21:00|评论(loading...)|编辑|收藏
一、打开CD-ROM
mciSendString("Set cdAudio door open wait",NULL,0,NULL);
二、关闭CD_ROM
mciSendString("Set cdAudio door closed wait",NULL,0,NULL);
三、关闭计算机
OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息
if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
//Windows98,调用ExitWindowsEx()函数重新启动计算机
DWORD dwReserved;
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、阅读全文>
发表于 @ 2008年06月06日 01:13:00|评论(loading...)|编辑|收藏
一个进程通常定义为程序的一个实例。在Win32中, 进程占据4GB的地址空间。与它们在MS-DOS和16位Windows操作系统中不同, Win32进程是没有活力的。这就是说,一个Win32进程并不执行什么指令,它只是占据着4GB的地址空间,此空间中有应用程序EXE文件的 代码和数据。EXE需要的任意DLL也将它们的代码和数据装入到进程的地址空间。除了地址空间,进程还占有某些资源,比如文件、动态内存分配和线程。当进程终止时,在它生命期中创建的各种资源将被清除。 阅读全文>
发表于 @ 2008年05月29日 13:20:00|评论(loading...)|编辑|收藏
由于本人在开发中经常要在程序中嵌入浏览器,为了符合自己的需求经常要对浏览器进行扩展和定制, 解决这些问题需在网上找资料和学习的过程,我想可能很多开发者或许会遇到同样的问题,特写此文,以供大家参考。 阅读全文>
发表于 @ 2008年04月25日 13:11:00|评论(loading...)|编辑|收藏
C/C++字符串处理:std::vector与std::StringBuilder阅读全文>
发表于 @ 2008年03月30日 12:46:00|评论(loading...)|编辑|收藏
C/C++字符串处理盘点:Char*/String/StringBuilder/TextPool/Rope 阅读全文>
发表于 @ 2008年03月22日 12:03:00|评论(loading...)|编辑|收藏