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