Archive

Archive for June, 2009

关于C和C++的布尔类型,_Bool和bool

June 4th, 2009 mopyman 2 comments

C++内置对布尔类型的支持,其关键字是bool,C语言直到C99标准才增加了对布尔类型的支持,关键字为_Bool,因为bool已经被C++ 用了,所以选了这个十分奇怪的关键字。在这之前C程序员对布尔类型的模拟是相当混乱的。为了在C和C++程序中以统一的方式使用布尔类型,同时提高可移植性,可以采用下面的方式:
Read more…

Categories: C/C++/Asm Tags:

likely,unlikely宏与GCC内建函数__builtin_expect()

June 4th, 2009 mopyman No comments

先罗嗦几句

最近在读linux 2.6 内核,虽然以前已经看了很多相关的知识,<<linux内核完全注释(0.11)>>也看了2,3遍,但读2.6内核仍然感到很吃力。面对2.6如此庞大的内核,信心真的不是很足,而且好像也没有很好的、有帮助的论坛来一起探讨,哎!现在正在边看<<情景分析>>,边看最新的内核,自<<情景分析>>出版以来,内核已经有了很多的变化,好难读啊!如果这样读下去算不算“皓首穷经”呢,不得而知了!
Read more…

Categories: GNU/Linux Tags:

GUI之窗口过程thunk

June 4th, 2009 mopyman No comments

thunk是什么?查字典只能让人一头雾水。thunk是一段插入程序中实现特定功能的二进制代码,这个定义是我下的,对不对各位看官请自己斟酌,呵呵。

我这里要讲的是窗口回调专用thunk,thunk的核心是调用栈动态修改技术。地球人都知道,windows的窗口回调函数是一个全局函数,类成员函数 是不可以作为窗口回调函数的,因为它有this指针,这给我们用C++来包装窗口带来不小的麻烦。你说什么?用一个全局函数或类的静态成员函数来做窗口回 调函数?这肯定没问题。但是这样带来的麻烦也许比你想象的要多,想想我们的GUI Framework不会只有一个类,而是一个类层级结构,会有许许多许多、形形色色的widget,每个都是一个窗口。对象与窗口之间的映射可能就是个不 小的问题,像MFC那样搞?太落伍了吧!用thunk就要简单的多。WTL用了thunk,但是不够彻底。
废话少说,先贴出thunk核心代码。

Read more…

Categories: KWinUI Tags:

Visual C++ 2008 Express编译boost 1.39 regex库遇到的问题及解决办法

June 1st, 2009 mopyman 1 comment

最近在玩boost,用vc++ 2008 express编译最新版本1.39时遇到一点小问题,记录于此。
分别下载了zlib,bzip2和icu,python暂时不玩,没接触过。我喜欢静态链接程序,根据官方文档的提示,在console输入如下指令,为了输入方便,最好写个bat脚本:

bootstrap
bjam -sBZIP2_SOURCE=D:/libs/bzip2-1.0.5 -sZLIB_SOURCE=D:/libs/zlib-1.2.3 -sHAVE_ICU=1 -sICU_PATH=D:/libs/icu link=static runtime-link=static threading=multi –without-python

console窗口一阵晃动后吐出了这么三行error:

error: link=shared together with runtime-link=static is not allowed
error: such property combination is either impossible
error: or too dangerious to be of any use

百思不得其解,明明我的link选项只有static,哪来的shared啊,郁闷啊郁闷,反复折腾后,发现,如果没有ICU选项,则不会出现此错误提示。

用vim打开boost_1_39_0\libs\regex\build\jamfile.v2,搜索一下/\<shared\>,果然在文件底部,218,223和229行链接选项被写死为shared。那就去掉这该死的shared,重新来过,bjam终于开始正常工作了。

编译带ICU选项的regex还会遇到一点儿小问题。boost.regex期望的icui18n.lib和icudata.lib与编译后的ICU库的名字并不相同,简单修改一下就可以了,如下:
libs\icu\lib\icuin.lib -> icui18n.lib
libs\icu\lib\icudt.lib -> icudata.lib

测试了boost 1.39官方文档的regex测试程序,静态链接,一切OK。

Categories: C/C++/Asm Tags:

Copyleft © 2009-2010 mopyman 本站为原创网站,除非另有声明,本网站采用知识共享“署名2.5 中国大陆”许可协议授权.