Chinaunix首页 | 论坛 | 博客
  • 博客访问: 258416
  • 博文数量: 21
  • 博客积分: 1263
  • 博客等级: 准尉
  • 技术积分: 697
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-24 00:05
个人简介

专注于Answers Ranking, Answer Monitor和log处理。

文章分类
文章存档

2014年(5)

2012年(16)

分类: C/C++

2012-04-08 09:02:39

Stl-config.h里面主要是定义各种常量,主要是为编译服务的,对各种主流的编译器的编译环境都进行了测试,以便在不同的环境中进行编译。这个文件没有细看,里面许多条件现在应该较新主流的编译器都是支持的。如:

  1. // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin type.
  2. # if defined(__sgi) && !defined(__GNUC__)
  3. # include <standards.h>
  4. # if !defined(_BOOL)
  5. # define __STL_NO_BOOL
  6. # endif
  7. //... ...
  8. # endif

  9. //下面定义了bool
  10. # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
  11.     typedef int bool;
  12. # define true 1
  13. # define false 0
  14. # endif
各编译器相差比较大的应该就是模板这一块了。里面定义了许多与模板相关的常量,如: __STL_CLASS_PARTIAL_SPECIALIZATION:  defined if the compiler supports partial specialization of template classes.
 __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler supports partial specialization syntax for full specialization of class templates.  (Even if it doesn't actually support partial specialization itself.)
__STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports partial ordering of function templates.  (a.k.a partial specialization of function templates.)
__STL_MEMBER_TEMPLATES: defined if the compiler supports template member functions of classes.
__STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports nested classes that are member templates of other classes.
__STL_TEMPLATE_FRIENDS: defined if the compiler supports templatized friend declarations.

不想深入研究的话就默认编译器都支持就行了。再就是异常捕获和断言了:

  1. # ifdef __STL_USE_EXCEPTIONS
  2. # define __STL_TRY try
  3. # define __STL_CATCH_ALL catch(...)
  4. # define __STL_THROW(x) throw x
  5. # define __STL_RETHROW throw
  6. # define __STL_NOTHROW throw()
  7. # define __STL_UNWIND(action) catch(...) { action; throw; }
  8. # else
  9. # define __STL_TRY
  10. # define __STL_CATCH_ALL if (false)
  11. # define __STL_THROW(x)
  12. # define __STL_RETHROW
  13. # define __STL_NOTHROW
  14. # define __STL_UNWIND(action)
  15. # endif

  16. #ifdef __STL_ASSERTIONS
  17. # include <stdio.h>
  18. # define __stl_assert(expr) \
  19.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
  20.              __FILE__, __LINE__, # expr); abort(); }
  21. #else
  22. # define __stl_assert(expr)
  23. #endif

既然出现了__FILE__就说一说C++里的六个预定义的符号常量:
__FILE__: 当前源代码文件的行号(一个整数常量)
__LINE__: 假定的源文件名(一个字符串)
_
_DATE__: 源文件的编译日期(字符串格式为:“Mmm dd yyyy")
__STDC__: 指出程序是否符合ANSI/ISO C标准。如果完全符合,值就为1,否为未定义
__TIME__: 源文件的编译时间(字符串格式为:"hh:mm:ss")
__cplusplus: 如果文件被C++编译器编译则包含值199711L,否则未定义。允许文件当做C/C++文件来创建和编译
阅读(2391) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:STL源代码剖析-02 Defalloc.h

给主人留下些什么吧!~~

重返人生2012-04-10 02:04:42

不想深入研究的话就默认编译器都支持就行了