2017-09-28 5 views
0

dire que j'ai les suivantesComment faire pour transformer le nom d'une macro en chaîne littérale, lorsque la macro est dans un tableau struct?

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

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

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

Je veux ajouter le nom de la macro à la variable nom pour quelque chose comme ceci:

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

Cela ne fonctionne évidemment pas car il pas développé. Comment peut-on contourner cela?

+0

une raison pour laquelle vous ne l'utilisez énumérations? Ensuite, la macro STR fonctionnerait comme vous le souhaitez. – Lundin

+0

Ce que vous cherchez est le nom "X macros", parfois coupé. Il y a même un tag [tag: x-macros] pour le sujet. Je doute que toutes les questions sur les macros X aient été taguées, mais cela vous donne un point de départ. –

Répondre

2

Je ne sais pas si cela est 100% ce que vous voulez, mais peut-être il est assez proche:

#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; 
} 

Cette impression:

name of 1 is 'ONE'