Ich versuche, mehrere Makros in der Definition eines anderen Makros zu verwenden, aber scheinen Probleme bei der Verkettung zu haben. Hier ist eine sehr vereinfachte Version von dem, was ich versuche zu tun:Verwenden Sie mehrere Makros in einer Makrodefinition
#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;
}
ich das Ergebnis 0
erwarten.
Aber ich bin immer Fehler kompilieren, weil das MACRO_RESOLVE
Makro den Weg nicht zu lösen Ich erwarte, dass es an:
$ 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.
So sieht es aus wie SET
nicht erweitert wird, wenn ich ENABLE_VAR_1
definieren.
Ich würde mit anderen Lösungen für dieses Problem in Ordnung sein. Das Hauptziel ist es, zwei Makros in die Definition eines anderen Makros einfügen zu können. –
Warum versuchen Sie das mit Makros? –
Related: [* Warum ist eine Ebene der Indirektion für dieses Verkettung Makro erforderlich? *] (Http://stackoverflow.com/questions/19666142) – DaoWen