为什么在真正不需要的时候使用这些宏

时间:2013-01-02 12:48:25

标签: c++ stl std

当我们查看STL头文件时,我们看到许多宏用于我们可以直接写单行或有时单个单词。我不明白为什么人们使用这么多的宏。 e.g。

 _STD_BEGIN

using ::type_info;

 _STD_END


 #if defined(__cplusplus)
  #define _STD_BEGIN    namespace std {
  #define _STD_END      }
  #define _STD  ::std::

3 个答案:

答案 0 :(得分:4)

图书馆提供商必须应对各种实施和用例。在这种情况下,我可以看到使用宏的两个原因(并且可能还有其他我现在没有想到的):

  • 需要支持不支持命名空间的编译器。我不确定它是否会成为最近实现的一个问题,但是大多数都有很长的历史并且删除了这些宏,即使不支持名称空间的编译器也不再受支持(不受保护using ::type_info;提示情况就是这样。优先级低。

  • 希望客户除了使用编译器提供程序提供的标准库而不替换它之外,还可以使用它们的标准库实现。然后,配置库将允许替换std的其他名称。

答案 1 :(得分:4)

#if defined(__cplusplus)
你的样本中的

是关键。在您的源代码中,我希望看到宏的替代定义。根据编译环境,某些结构可能需要不同的语法或根本不受支持;所以我们编写代码一次,使用宏来构造这样的构造,并根据支持的内容安排适当地定义宏。

答案 2 :(得分:1)

宏与变量:在这种情况下,宏可以运行得更快,因为它们在预处理后实际上是常量。(常量上的操作比变量上的操作快)。

宏与函数:与使用函数时相比,使用宏可以避免开销,需要将参数推送到堆栈,推送返回地址然后从堆栈中弹出....

宏:执行速度更快但需要更多内存空间。 功能:执行速度较慢但内存空间较小。