gpt4 book ai didi

c++ - 用于存储另一个宏然后还原的临时宏

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:52 25 4
gpt4 key购买 nike

我想更好地控制宏,例如断言(以及一些不受我直接控制的日志记录宏)。所以我决定做这样的事情,希望它能工作(如果有人想知道,它不起作用的原因是 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

最佳答案

一些编译器提供#pragma push_macro#pragma pop_macro来保存和恢复宏状态。

虽然可移植性有限。

关于c++ - 用于存储另一个宏然后还原的临时宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6215507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com