0
これはばかげているかもしれませんが、マクロの置換順序を忘れてしまったようです。誰かが2つのマクロの値を正しく入れ替える方法を知る手助けができますか?考えてみましょう以下:マクロの値の入れ替え
#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
これは不必要に複雑で壊れやすいようです。あなたがしようとしていることをやり遂げる別の方法がありますか? –
マクロがどのように機能しているのか、あなたは理解できないと思います。彼らは価値がありません。マクロは、コンパイルの前に、ある文字列を別のものに置き換えるだけです(基本的なもの)。とにかく、あなたのコード上でプリプロセッサを実行し、中間出力を見てください(これにはコンパイラオプションがありますが、どのコンパイラを使用していますか?)。これにより、問題の原因が明らかになります。 –
@jeffamaphone、私はgccを使用しています、どうすれば中間出力を見ることができますか?私はstringificationなどの例でこれをテストしたいと思います:http://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification – jmlopez