【发布时间】:2011-06-02 13:55:23
【问题描述】:
我想更好地控制宏,例如断言(以及一些不受我直接控制的日志记录宏)。所以我决定做这样的事情,期待它能够工作(如果有人想知道,它不起作用的原因是MY_ASSERT_COPY 中的最后一个undef 在它之前使MY_ASSERT 失效)。
#ifndef ENABLE_FULL_ERROR_ASSERTS
#define MY_ASSERT_COPY MY_ASSERT
#undef MY_ASSERT
#define MY_ASSERT
#endif
// Code for my current class, which happens to be header only
#ifndef ENABLE_FULL_ERROR_ASSERTS
#undef MY_ASSERT
#define MY_ASSERT MY_ASSERT_COPY
#undef MY_ASSERT_COPY
#endif
现在我知道了几种解决方法,一种是为该文件的断言定义另一个宏,然后我可以在不影响程序任何其他部分的断言的情况下关闭它。我最初认为这是一个非常优雅的解决方案(在我发现它没有编译之前),它允许我在任何地方使用MY_ASSERT,然后简单地为特定文件关闭它。
由于上述方法不起作用,是否有一种解决方法可以让我有选择地杀死宏而不影响周围的代码,也无需定义另一个替代宏,如#define MY_ASSERT_FOR_VECTORS MY_ASSERT
【问题讨论】: