0
私は別のマクロの定義で複数のマクロを使用しようとしていますが、それらを一緒に連結する際に問題があるようです。ここで私は何をしようとしているのは非常に単純化したバージョンです:マクロ定義で複数のマクロを使用する
#include <stdio.h>
#define PICK_SET_A
#ifdef PICK_SET_A
#define SET A
#endif
#ifdef PICK_SET_B
#define SET B
#endif
#define ENABLE_VAR_1_A 1
#define ENABLE_VAR_2_A 1
#define ENABLE_VAR_1_B 0
#define ENABLE_VAR_2_B 0
#define MACRO_RESOLVE(var,set) ENABLE_VAR_##var##_##set
#define ENABLE_VAR_1 MACRO_RESOLVE(1, SET)
#define ENABLE_VAR_2 MACRO_RESOLVE(2, SET)
int main(int argc, char **argv) {
fprintf(stdout, "VALUE: %d\n", ENABLE_VAR_1);
return 0;
}
私は結果が0
ことを期待します。
しかし、私はMACRO_RESOLVE
マクロが、私はそれを期待する方法を解決していないため、コンパイルエラーを取得しています:
$ gcc -o asdf asdf.c
asdf.c:25:36: error: use of undeclared identifier 'ENABLE_VAR_1_SET'
fprintf(stdout, "VALUE: %d\n", ENABLE_VAR_1);
^
asdf.c:20:26: note: expanded from macro 'ENABLE_VAR_1'
#define ENABLE_VAR_1 MACRO_RESOLVE(1, SET)
^
asdf.c:18:32: note: expanded from macro 'MACRO_RESOLVE'
#define MACRO_RESOLVE(var,set) ENABLE_VAR_##var##_##set
^
<scratch space>:229:1: note: expanded from here
ENABLE_VAR_1_SET
^
1 error generated.
だから、それは私がENABLE_VAR_1
を定義する際に、拡張取得されていないSET
のように見えます。
この問題の解決方法は他にも問題ありません。主な目的は、このような別のマクロの定義に2つのマクロを挿入できるようにすることです。 –
なぜマクロでこれをやろうとしていますか? –
関連性:[*なぜこの連結マクロに必要なインダイレクションのレベル?](http://stackoverflow.com/questions/19666142) – DaoWen