是否可以在预处理中进行真正的添加而不仅仅是替换?

时间:2017-08-25 10:54:03

标签: c++ c c-preprocessor

我想对两个宏进行真正的添加(而不仅仅是替换),并希望在另一个宏中使用它们的结果。

例如。

#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来生成相关的输出。

0 个答案:

没有答案