【发布时间】:2013-08-17 22:16:21
【问题描述】:
我目前正在开发一个仅包含标头的库,并且我希望能够使用一些宏,而无需从客户端代码中使用它们。示例:
// library_header1.h
#define MACRO_NUMBER_1(__X__) doSomethingWith(__X__) // etc...
class LibraryClass1
{
// We'll use the macro somewhere in here.
};
现在,如果我包含 library_header1.h,我就可以使用 MACRO_NUMBER_1。有什么办法可以避免吗?
【问题讨论】:
-
#undef似乎工作正常,但我也想知道是否有任何方式未定义宏(以便自动完成/智能感知不显示它们)。 -
您正在以源代码形式提供您的库。您不能希望隐藏实现。是否显示宏取决于 Intellisense 实现。对于 Microsoft 的编译器,您可以检查使用
#pragma push_macro/pop_macro是否对 Intellisense 实现有任何影响。 -
您可以在 Visual Studio 中使用预构建后构建事件来仅在编译期间启用宏并避免智能感知。检查msdn.microsoft.com/en-us/library/vstudio/42x5kfw4.aspx
标签: c++ c-preprocessor