2017-09-28 5 views
0

sagen, ich habe folgendesWie wird der Name eines Makros in eine literale Zeichenfolge umgewandelt, wenn sich das Makro in einem struct-Array befindet?

#define STR(x) #x 
#define ONE 1 
#define TWO 2 

typedef struct 
{ 
    int item; 
    char * name; 
}bag_t; 

bag_t my_bag[] = 
{ 
    {ONE, ""}; 
    {TWO, ""}; 
} 

ich den Namen des Makros auf den Namen Variable so etwas wie dies hinzufügen möchten:

my_bag[1].name = STR(my_bag[1].item); 

, die offensichtlich nicht funktioniert, da es nicht erweitert. Wie kann das Problem umgehen?

+0

Gibt es Gründe, warum Sie nicht Aufzählungen verwenden? Dann würde das STR-Makro funktionieren, wie Sie es wollen. – Lundin

+0

Was Sie suchen, heißt "X-Makros", manchmal mit Bindestrich. Es gibt sogar ein Tag [tag: x-macros] für das Thema. Ich bezweifle, dass jede Frage über X-Makros damit markiert wurde, aber es gibt Ihnen einen Ausgangspunkt. –

Antwort

2

nicht sicher, ob diese 100% ist, was Sie wollen, aber vielleicht ist es nahe genug:

#define ONE 1 
#define TWO 2 

typedef struct 
{ 
    int item; 
    const char *name; 
}bag_t; 

#define BAG_INIT(n) { n, #n } 

const bag_t my_bag[] = 
{ 
    BAG_INIT(ONE), 
    BAG_INIT(TWO), 
}; 

int main(void) { 
    printf("name of %d is '%s'\n", my_bag[0].item, my_bag[0].name); 
    return 0; 
} 

Diese Drucke:

name of 1 is 'ONE' 
Verwandte Themen