我有一个名为DEVLOGGER
和DEVLOGARRAYMSG
的宏。
DEVLOGGER
负责调用单例函数,该函数记录所传递的消息。
DEVLOGARRAYMSG
调用一个单例函数,该函数接收一个std::array
并创建一条消息。然后,此消息将传递到DEVLOGGER
进行记录。
我拥有这些 macros 的原因是因为日志记录仅在调试模式下发生。在发布模式下编译源时,将忽略它们。
#if _DEBUG
#undef DEVLOGGER
#define DEVLOGGER(message) { \
DevLogger::Get().Log(message);}
#undef DEVLOGARRAYMSG
#define DEVLOGARRAYMSG(arr) { \
DEVLOGGER(DevLogger::Get().CreateReelPosMsg(arr));}
#else
#undef DEVLOGGER
#define DEVLOGGER
#undef DEVLOGARRAYMSG
#define DEVLOGARRAYMSG
#endif /*_DEBUG*/
但是,这是我的问题。 考虑这个例子,
std::array<int, (size_t)REEL_MAX> arr1 = { 1,2,3,4,5};
DEVLOGARRAYMSG(arr1);
当我在发布模式下运行它时,即使编译期间编译器忽略了DEVLOGARRAYMSG
调用,也会创建std数组。
我也许可以使用#if#endif
卫兵;
#if _DEBUG
std::array<int, (size_t)REEL_MAX> arr1 = { 1,2,3,4,5};
DEVLOGARRAYMSG(arr1)
#endif
但是我并不是很热衷于这种方法,因为在整个开发过程中 #if #endif 警卫总是会被意外放错,遗忘/删除
如果我可以做类似的事情,
DEVLOGARRAYMSG({1,2,3,4,5});
这本来很好,但据我所知这是无效的。 我想知道你们如何处理此类问题