0
这可能看起来很愚蠢,但我似乎忘记了宏的替换顺序。有人能帮我弄清楚如何正确交换两个宏的值吗?考虑以下几点:交换宏的值
#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);
}
所有我想要的是拥有10所取代var1
和var2
由5所取代的如何解决这个烂摊子任何想法?
我想用这个来揣摩出来的东西该另一个问题:
C Macro to protect definitions
这似乎不必要的复杂和脆弱。有没有其他方法可以做你想做的事情? – 2012-02-22 21:14:33
我不认为你明白宏是如何工作的。他们没有价值。宏在编译之前只需将一个文本字符串替换为另一个文本字符串(以及基本字符串)。无论如何,在您的代码上运行预处理器并查看中间输出(这里有一个编译器选项;您使用的是什么编译器?)。这将阐明你的问题的根源。 – 2012-02-22 21:15:36
@jeffamaphone,我正在使用gcc,我怎样才能看到中间输出。我想测试一下这样的例子,如字符串化:http://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification – jmlopez 2012-02-22 23:05:03