1

当我们查看 STL 头文件时,我们看到使用了许多宏,我们可以直接写单行,有时是单字。我不明白为什么人们使用这么多宏。例如

 _STD_BEGIN

using ::type_info;

 _STD_END


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

3 回答 3

4

库提供者必须应对范围广泛的实现和用例。在这种情况下,我可以看到使用宏的两个原因(可能还有其他我现在没有考虑的原因):

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

  • 除了编译器提供商提供的标准库之外,还希望允许客户使用他们的标准库实现,而无需替换它。然后,库的配置将允许用另一个名称替换std.

于 2013-01-02T12:57:22.137 回答
4

#if defined(__cplusplus)

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

于 2013-01-02T12:57:58.827 回答
1

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

宏 vs 函数:与使用函数时需要将参数压入堆栈、压入返回地址然后从堆栈中弹出相比,使用宏避免了开销。

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

于 2013-01-03T06:58:18.187 回答