boost/config.hpp文件详解

本文详细解析了boost/config.hpp头文件的结构和功能,包括用户配置、编译器配置、标准库配置、平台配置等部分,介绍了如何控制和适配不同编译器、标准库和平台。重点关注了如BOOST_SYMBOL_EXPORT、BOOST_SYMBOL_IMPORT等关键宏的作用。
摘要由CSDN通过智能技术生成

简要概述

今天突发奇想想看一下boost/config.hpp的内部实现,以及他有哪些功能。

这个头文件都有一个类似的结构,先包含一个头文件,假设为头文件1,然后包含这个头文件中定义的宏。对于头文件中1中,有大量的#if..#endif,在这些指定的宏块中定义一个头文件宏,在这些大量的#if...#end中,头文件宏有且只会被定义一次。具体的定义详情在下面进行详解。

根据上面的思路分析出了,config.hpp文件中主要包含几个主要的头文件:关于用户配置的头文件(User config)、编译器配置文件(Compiler config)、C++标准库配置文件(Standard library)、平台配置文件(Platform config)、其他零碎的配置文件。接下来描述每个头文件里面的大概作用。

用户配置文件(可控制的)

它是可选配置,可以通过定义BOOST_NO_USER_CONFIG宏来禁止包含用户配置头文件。如果没有禁止的话,那么这个头文件就是boost/config/user.hpp。

如果你没有禁止的话,那么你可以在boost/config/user.hpp中定义一些关键的宏。这个文件中默认一些被注释的宏,你可以根据需求取消这些注释,并且定义自己的配置。主要有如下宏:

  • BOOST_COMPILER_CONFIG,这个宏用来指定编译器配置的hpp文件,他是有一定标准的,他是和编译器相关的,要定一些通用功能的宏,比如BOOST_SYMBOL_EXPORT,BOOST_SYMBOL_IMPORT,还有一些关于编译器对于标准的支持,比如是否支持long long类型,是否支持pragma once,是否支持cxx11中的某些特性。。。,详情请参考:boost/config/compiler/gcc.hpp。一般不要定义这个宏,因为对于主流的编译器,他都会有对应的编译器配置头文件(这个宏在下面还会介绍到)。一般是对于一种新的编译器,如果你想让他支持boost的话,那么你需要重新定义这个宏,所以说,一般用户是不会自己定义这个宏的。
  • BOOST_STDLIB_CONFIG,这个宏用来指定标准库配置文件(hpp文件),主要描述一些标准库对于某些标准的支持(后面会有详细介绍的),因为Boost都主流的标准库都会自己定义对应这个hpp配置文件,所以一般用户不用自己定义这个宏,只有一个新的标准库的作者,可能才要定义这个宏为自己标准库的配置文件。文件样例可以参考:boost/config/stdlib/libstdcpp3.hpp(他是gnu自带的标准库配置文件),boost/config/stdlib/sgi.hpp(著名的sgi标准库配置文件)。
  • BOOST_PLATFORM_CONFIG,平台配置文件,普通用户不用定义,只有新的系统作者,或者某个平台作者才会定义这个文件,样例参考:boost/config/platform/win32.hpp(win32平台),boost/config/platform/linux.hpp(linux平台),boost/config/platform/bsd.hpp(bsd平台)
  • BOOST_NO_COMPILER_CONFIG,定义这个宏可以取消编译器配置
  • BOOST_NO_STDLIB_CONFIG,定义这个宏可以取消标准库配置
  • BOOST_NO_PLATFORM_CONFIG,定义这个宏可以取消平台配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值