现在的位置: 首页 > 综合 > 正文

我读boost源代码笔记 第一篇 编译器版本确定

2013年06月09日 ⁄ 综合 ⁄ 共 1514字 ⁄ 字号 评论关闭

不同的编译器对于template的支持不同的,boost对于不同的编译器是不同编译方法,因此开始特别强调本人使用的编译环境:本文使用的编译器版本为为VC 8.0, (主流了国人都是用visual studio的了,如果你用的不是visual studio本人写的读boost笔记对你就没有太大用了)

此外本笔记使用的是boost源代码的1.0版本,因为本人在阅读源代码的时候可能会对源代码进行改动,所以行号有所改动,但是相差不大了。在周围找找准能找到的

在阅读本文前,建议大家能够调配好boost,配置boost网络上一堆文章。我就不罗嗦了

言归正传,现在先来谈谈boost是怎么区分编译器的。 boost/config.hpp line:29

// if we don't have a compiler config set, try and find one:

#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)

#  include <boost/config/select_compiler_config.hpp>

#endif

也就是说我们找到了怎么设置编译器的头文件了,秘密就在 boost/config/select_compiler_config.hpp中在boost/config/select_compiler_config.hpp line:39 后我们可以看到有许多的#if defined等与编译头,就是对于不同的编译器进行选择了。

原来编译器默认会设置一些宏,我们可以根据这些宏来选择编译器,当然了亲爱vc一贯是受到鄙视的,我们在boost/config/select_compiler_config.hpp line:103,也就是最后一个重终于发现了亲爱的vc了

#elif defined _MSC_VER

//  Microsoft Visual C++

//

//  Must remain the last #elif since some other vendors (Metrowerks, for

//  example) also #define _MSC_VER

#   define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp"

原来vc的编译器会设置的宏如下

_MSC_VER     vc的版本号 1400表示vc8 _MSC_FULL_VER  vc的具体版本号,这个似乎比上一个更加细

根据判断_MSC_VER可以判断我们使用的就是亲爱的vc了~~接下来我们就来到了boost/config/compiler/visualc.hpp文件中 boost/config/compiler/visualc.hpp 是对于vc各个版本的具体细分,可以看到

boost/config/compiler/visualc.hpp line: 78

boost/config/compiler/visualc.hpp line: 78

#if _MSC_VER <= 1400  // 1400 == VC++ 8.0

#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS

#endif



#if _MSC_VER <= 1500  // 1500 == VC++ 9.0

#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP

#endif

我们亲爱的vc8仅仅不支持全部特性中的2个特性,算是很牛的了。呵呵关于不同的版本的vc分别支持什么特性我们通过阅读boost/config/compiler/visualc.hpp就可以得出了。呵呵

【上篇】
【下篇】

抱歉!评论已关闭.