随笔分类 -  C/C++

摘要:对于参数较多的函数,如UI库函数,你很难去记忆每个位置的参数类型和意义,尤其在你的IDE比较简陋的开发环境下,尤为痛苦,可能你需要频繁的查询文档。像Python这样语言,原生支持命名参数,如def func(name, age): print name, agefunc('aaa', 1)func(age = 2, name = 'bbb')可能你的函数有10个参数,其中大部分都可以有默认值,因此,如果你需要指定其中第3、第5个参数的值,而其他参数使用默认行为的时候,"func(arg3 = 3, arg5 = 5)"这样的调用很方便。要在C 阅读全文
posted @ 2012-10-26 21:36 Scan. 阅读(1601) 评论(0) 推荐(0)
摘要:刘未鹏牛最近的一篇文章“C++11和快速迭代开发”中,提到一个小工具Ensure,很有用,但他不方便提供具体代码,这里我给出一个简易实现。Ensure用法如:ENSURE(0 <= index && index < v.size())(index)(v.size());断言失败时,会打印:Failed: 0 <= index && index < v.size()File: xxx.cpp Line: 123Context Variables: index = 12345 v.size() = 100概括来说,Ensure至少包括以下特性 阅读全文
posted @ 2012-10-26 11:24 Scan. 阅读(3582) 评论(2) 推荐(1)
摘要:几个月的构想+0.5小时的设计+4小时的linq.h编码+3小时的测试编码。大量使用C++11的特性,在GCC 4.7.2下编译通过。关于实现相关的描述就不说了,我表达能力差,恐怕讲清楚还需要好几个小时。具体使用参见测试码。上代码:(1) linq.hView Code #ifndef LINQ_H#define LINQ_H#include <cassert>#include <utility>#include <functional>#include <memory>#include <algorithm>#include < 阅读全文
posted @ 2012-10-20 23:28 Scan. 阅读(4770) 评论(17) 推荐(1)
摘要:这篇笔记是我在读《Windows核心编程》第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的。开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯。 海量细节。第1章 错误处理1. GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖。2. GetLastError可能用于描述成功的原因(CreatEvent)。3. VS监视窗口err,hr。4. FormatMessage。5. SetLastError。第2章 字符和字符串处理1. ANSI版... 阅读全文
posted @ 2011-09-30 12:24 Scan. 阅读(9001) 评论(1) 推荐(3)
摘要:进程启动后使用的默认CPU集合,VC的链接选项中并无设置,可以自己修改PE文件:1 LOADED_IMAGE img = {0};2 MapAndLoad("C:/Test05", NULL, &img, FALSE, FALSE);3 IMAGE_LOAD_CONFIG_DIRECTORY dir = {0};4 GetImageConfigInformation(&img, &dir);5 6 dir.ProcessAffinityMask = 3;7 8 SetImageConfigInformation(&img, &dir) 阅读全文
posted @ 2011-08-04 22:24 Scan. 阅读(404) 评论(0) 推荐(0)
摘要:测试代码:1 FILE *f = fopen("1.txt", "w");2 printf("%x\n", f);3 fprintf(f, "%s", "0123");4 FILE *f2 = freopen("2.txt", "w", f);5 printf("%x\n", f);6 printf("%x\n", f2);7 fprintf(f, "%s", "0123"); 阅读全文
posted @ 2011-07-20 13:49 Scan. 阅读(4539) 评论(4) 推荐(0)
摘要:参见文章http://www.cnblogs.com/cbscan/articles/2047269.html总结,在满足二进制兼容这个前提下导出基于对象的库接口:方式使用便捷性接口声明可读性性能C函数差好好C++纯虚函数好差好C++非虚函数,PIML实现好好差其实三种方案都是通过查表取得函数的,1、3查引入表,2查虚函数表,只是默认情况下,一个声明在接口函数集中间的新函数,不会改变旧引入表(这个行为是从那篇文章中推断出来的)却一定会改变虚表,所以方案1、3大可以将新函数随便放置不会破坏二进制兼容性。假如特殊的编译器指令可以排布虚函数在虚表中的位置,并且也有特殊指令来强制指定函数在引入表中的位 阅读全文
posted @ 2011-05-16 01:56 Scan. 阅读(2644) 评论(0) 推荐(1)