我到处都有一个宏

   #define DBG(s) do_something_with(s)

但是,在其中一个文件中,我想使其无法使用-并导致编译错误
#ifdef DBG
#undef DBG
#define DBG(s) #error "do not use DBG in this file"
#endif

显然,我的示例不起作用。有什么建议可以实现这样的建议吗?

最佳答案

在C++ 11中,您可以执行以下操作:

#ifdef DBG
# undef DBG
#endif
#define DBG(s) static_assert(false, "you should not use this macro")

错误消息如下:
C:/Code/Test/src/src/main.cpp: In function 'int main(int, char**)':
C:/Code/Test/src/src/main.cpp:38:16: error: static assertion failed: you should not use this macro
 #define DBG(s) static_assert(false, "you should not use this macro")
                ^
C:/Code/Test/src/src/main.cpp:45:5: note: in expansion of macro 'DBG'
     DBG(42);
     ^

在C / C++ 03中,简单的#undef将导致类似以下内容:
C:/Code/Test/src/src/main.cpp:45:11: error: 'DBG' was not declared in this scope

这可能就足够了。

10-04 23:02