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
选项。