我想对两个宏进行真正的添加(而不仅仅是替换),并希望在另一个宏中使用它们的结果。
例如。
#define NUM_1 1
#define NUM_2 2
#define NUM_3 3
#define ADD(X,Y) ((X)+(Y))
#define CAT_(X,Y) X##Y //For two layer of indirection
#define MY(NUMBER) CAT_(NUM_,NUMBER)
现在我想使用像这样的东西
MY( ADD(NUM_1 , NUM_2 ))
或通过这种方式
#define RESULT ((NUM_1) + (NUM_2))
MY( RESULT )
我期待MY(RESULT)
或MY(ADD(NUM_1,NUM_2))
的输出
NUM_3
是否可以在预处理阶段进行?如果是,请指导我如何做。
根据预处理器输出,我得到的结果NUM_((1)+(2))
完全没问题。
我用简单的添加形式构建了我的问题。实际上,我的要求是使用一个复杂方程的结果,它将以类似EEPROM_PAGE_10
的形式与大约1000个宏相关联。10
这是另一个方程的输出,来自另一个方程式的算术运算#define
宏,我无法转发到编译器。
注意 此问题与Can I add numbers with the C/C++ preprocessor?不同 因为在那篇文章中我们正在取代众所周知的结果, 例如,他们已经定义了像
这样的宏#define ADD_1_AND_2 3
我的要求不同,我想知道,是否可以在预处理阶段将((2)+(1))
转换为3
。所以我可以使用3
作为NUM_3
来生成相关的输出。