C++ 交换宏的值

C++ 交换宏的值,c++,c,c-preprocessor,C++,C,C Preprocessor,这可能看起来很愚蠢,但我似乎忘记了宏的替换顺序。有人能帮我找出如何正确交换两个宏的值吗?考虑以下事项: #include <stdlib.h> #include <stdio.h> #define var1 5 #define var2 10 #define _VAL(a) a #define VAL(a) _VAL(a) int main(){ printf("var1 = %d, var2 = %d\n", var1, var2); #define

这可能看起来很愚蠢,但我似乎忘记了宏的替换顺序。有人能帮我找出如何正确交换两个宏的值吗?考虑以下事项:

#include <stdlib.h>
#include <stdio.h>

#define var1 5
#define var2 10

#define _VAL(a) a
#define VAL(a) _VAL(a)


int main(){

    printf("var1 = %d, var2 = %d\n", var1, var2);

#define TEMP VAL(var1)
#undef var1
#define var1 VAL(var2)
#undef var2
#define var2 VAL(TEMP)

    printf("var1 = %d, var2 = %d\n", var1, var2);
}
#包括
#包括
#定义var15
#定义var2 10
#定义_VAL(a)a
#定义VAL(a)_VAL(a)
int main(){
printf(“var1=%d,var2=%d\n”,var1,var2);
#定义临时值(var1)
#未定义变量1
#定义var1 VAL(var2)
#未定义变量2
#定义var2 VAL(临时值)
printf(“var1=%d,var2=%d\n”,var1,var2);
}
我想要的就是将
var1
替换为10,将
var2
替换为5。有没有办法解决这个烂摊子

我试着用这个来解决另一个问题:

无法完成。
正如@jeffamaphone在评论中解释的,宏定义不是赋值。

#定义一个B
并不关心
B
的值。它只记得
A
应该替换为
B
。后来,当在源代码中看到
A
时,它将被替换为
B
,然后可以再次替换,使用当时定义为
B
的任何内容。

这似乎不必要地复杂和脆弱。有没有其他方法来做你想做的事情?我认为你不太了解宏是如何工作的。它们没有价值。宏只是在编译之前用另一个文本字符串替换一个文本字符串(基本的)。无论如何,在代码上运行预处理器并查看中间输出(有一个编译器选项;您使用的是什么编译器?)。这将阐明问题的根源。@jeffamaphone,我使用的是gcc,如何才能看到中间输出。我想用一个例子来测试这一点,比如字符串化:我对gcc不太熟悉,但我相信您可以在命令行中使用
-E
选项。