Macros 如何在另一个宏中存储宏?
我有一个宏Macros 如何在另一个宏中存储宏?,macros,c-preprocessor,Macros,C Preprocessor,我有一个宏DDLogDebug(…),我想执行以下操作 #define _DDLogDebug(arg...) DDLogDebug(args) #undef DDLogDebug #define DDLogDebug(args...) doSomething(); _DDLogDebug(arg...) 但它不起作用。我需要一个命令来“存储”宏DDLogDebug的内容,而不是#define#u DDLogDebug(arg…)DDLogDebug(args) 这样的事情存在吗 如果要修改
DDLogDebug(…)
,我想执行以下操作
#define _DDLogDebug(arg...) DDLogDebug(args)
#undef DDLogDebug
#define DDLogDebug(args...) doSomething(); _DDLogDebug(arg...)
但它不起作用。我需要一个命令来“存储”宏DDLogDebug
的内容,而不是#define#u DDLogDebug(arg…)DDLogDebug(args)
- 这样的事情存在吗
- 如果要修改定义未公开的宏,应该怎么做
\u DDLogDebug
时,它实际上并没有链接到DDLogDebug
的定义,而是准确地存储了您编写的内容。它不会尝试实际查找任何名称的扩展,直到宏在程序中的任何定义之外使用。至此,DDLogDebug
的定义已经不存在了
这实际上是一种有价值的行为,因为它允许使用以下技术:一个定义可以提供一个框架,让不同的调用上下文决定如何以不同的方式实际使用它。外部宏不仅不依赖于编写时可用的定义,而且其内容的含义可以在整个程序中更改,而无需更改其结构
如果你不能解决这个问题,你可能会有一些非标准的,但广泛支持的运气
使用推送和弹出的示例:
#define FOO 123
#pragma push_macro("FOO")
#undef FOO
FOO
#pragma pop_macro("FOO")
FOO
通过
gcc-E
运行此命令,您将看到它发出FOO
(新行)123
。与Clang一起工作。您知道在为OSX编程时这些指令是否可用吗?看来他们不是。