【发布时间】:2015-08-05 13:15:02
【问题描述】:
我想使用在不同头文件中定义的同名和不同实现的宏。
我有两个头文件h1.h 和h2.h。在我定义的第一个头文件中:
#define PRINT printf(" hi , macro 1\n");
在第二个头文件中
#define PRINT printf(" hi , macro 2\n");
在main() 中,当我尝试使用 PRINT 时,它的打印取决于包含的顺序。
我发现了一些类似的问题,他们使用了一个包装器,通过包含第一个头文件然后定义一个内联方法:
inline void print1() {
PRINT();
}
然后取消定义 PRINT 并包括第二个头文件。在main() 中,当我调用 print1() 和 PRINT 时,我得到了它们的输出。
我缺少的一点是,在我们从第一个头文件中取消定义 PRINT 之后,我们仍然能够拥有它 - 换句话说,当我们在内联函数中调用它时会发生什么?编译器是否复制了 PRINT 的值并将其分配给函数并以某种方式保存函数?
【问题讨论】:
-
惊喜,您正在使用预处理器 MACRO... :-)