想象一下,我想要#define一个宏,使其等于另一个宏的当前值(如果存在这样的概念).
例如:
#include "def_a.h" // defines macro A
#define B A
Run Code Online (Sandbox Code Playgroud)
这定义B为A.如果A后来的变化定义(即,通过重新定义)的值B也发生变化(因为B扩展到A在使用点,这进一步扩展到的新值A).
我想一些方法来"烤在"值A入B,这样B只是扩展到的价值A,而不是A自己.
例如:
#define A first
#define B BAKE_IN(A)
#undef A
#define A second
#define C BAKE_IN(A)
#undef A
#define A third
// here I want B to expand to first, and C to expand to second
Run Code Online (Sandbox Code Playgroud)
当然BAKE_IN不是真的,但我想知道是否有某种方法可以达到这个效果.
现在,我并没有真正说明如果A本身是用其他宏来定义会发生什么,但我可以用"一级扩展"(即B得到A的值扩展,所以进一步的宏)保持)并且还"完全扩展"(即A完全展开,递归,因为它将在使用点).