Как получить доступ к элементу структуры со строковым форматированием (используя ## или # в макросе C) - PullRequest
0 голосов
/ 29 марта 2020
typedef enum
{
    ENUM1_A=0,
    ENUM1_B,
}someEnum1_e;

typedef union
{
    someEnum1_e value;
}someEnum1_e_t;


#define GET_ELEMENT(data_name) blah.#data_name    

int main (void)
{
    someEnum1_e_t  blah = {ENUM1_A};

    printf("val = %d ",GET_ELEMENT(value));
}

возвращает:

main.c: In function ‘main’:
main.c:27:41: error: expected identifier before string constant
     printf("val = %d ",GET_ELEMENT(value));
                                         ^
main.c:21:38: note: in definition of macro ‘GET_ELEMENT’
 #define GET_ELEMENT(data_name) blah.#data_name  

Как я могу получить доступ к blah.value, используя ## или # в C макросе?

1 Ответ

0 голосов
/ 29 марта 2020

Не использовать #:

#define GET_ELEMENT(data_name) blah.data_name
...