当我们查看STL头文件时,我们看到许多宏用于我们可以直接写单行或有时单个单词。我不明白为什么人们使用这么多的宏。 e.g。
_STD_BEGIN
using ::type_info;
_STD_END
#if defined(__cplusplus)
#define _STD_BEGIN namespace std {
#define _STD_END }
#define _STD ::std::
答案 0 :(得分:4)
图书馆提供商必须应对各种实施和用例。在这种情况下,我可以看到使用宏的两个原因(并且可能还有其他我现在没有想到的):
需要支持不支持命名空间的编译器。我不确定它是否会成为最近实现的一个问题,但是大多数都有很长的历史并且删除了这些宏,即使不支持名称空间的编译器也不再受支持(不受保护using ::type_info;
提示情况就是这样。优先级低。
希望客户除了使用编译器提供程序提供的标准库而不替换它之外,还可以使用它们的标准库实现。然后,配置库将允许替换std
的其他名称。
答案 1 :(得分:4)
这
#if defined(__cplusplus)
你的样本中的是关键。在您的源代码中,我希望看到宏的替代定义。根据编译环境,某些结构可能需要不同的语法或根本不受支持;所以我们编写代码一次,使用宏来构造这样的构造,并根据支持的内容安排适当地定义宏。
答案 2 :(得分:1)
宏与变量:在这种情况下,宏可以运行得更快,因为它们在预处理后实际上是常量。(常量上的操作比变量上的操作快)。
宏与函数:与使用函数时相比,使用宏可以避免开销,需要将参数推送到堆栈,推送返回地址然后从堆栈中弹出....
宏:执行速度更快但需要更多内存空间。 功能:执行速度较慢但内存空间较小。