赞
踩
以下是使用#define的一些方案是一个很好的解决方案:
添加诊断信息同时保留功能签名:
#ifdef _DEBUG
#define Log(MSG) Log((MSG), __FILE__, __LINE__);
#endif
条件汇编和包括守卫也是一个很好的例子(没有给出的例子,你应该明白这个:))。
锅炉代码是另一个例子,但这可以很容易被滥用。使用宏作为样板代码的一个很好的例子是Boost.UnitTest中的BOOST_AUTO_TEST_CASE宏(更为示例的是将Windows API映射到CHAR或WCHAR宏的WinAPI宏集)。
另一个很好的例子是提供编译器专用的关键字和设置:
#if (defined _WIN32) && (defined LIB_SHARED)
# ifdef LIB_EXPORTS
# define LIB_EXPORT __declspec(dllexport)
# else
# define LIB_EXPORT __declspec(dllimport)
# endif /* LIB_EXPORTS */
#else
# define LIB_EXPORT extern
#endif /* _WIN32 && LIB_SHARED */
用法:
// forward declaration of API function:
LIB_EXPORT void MyFunction(int);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。