【发布时间】:2012-02-22 21:11:51
【问题描述】:
这可能看起来很愚蠢,但我似乎忘记了替换宏的顺序。有人可以帮我弄清楚如何正确交换两个宏的值吗?考虑以下几点:
#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);
}
我想要的只是将var1 替换为10 并将var2 替换为5。关于如何解决这个混乱的任何想法?
我正在尝试使用它来尝试解决另一个问题:
【问题讨论】:
-
这似乎是不必要的复杂和脆弱。有没有其他方法可以做任何你想做的事情?
-
我认为您不太了解宏的工作原理。它们没有价值。宏只是在编译之前用另一个文本字符串替换一个文本字符串(嗯,基本的)。无论如何,在您的代码上运行预处理器并查看中间输出(有一个编译器选项;您使用的是什么编译器?)。这将阐明问题的根源。
-
@jeffamaphone,我正在使用 gcc,如何查看中间输出。我想在字符串化等示例上对此进行测试:gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification
-
我对gcc不太熟悉,但相信你在命令行使用
-E选项。
标签: c++ c c-preprocessor