Преобразование структуры в символ - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть проблема, когда мне нужно преобразовать имя переменной структуры в char. Например:

struct CARINFO a;

Когда моя функция принимает аргумент CARINFO a, я хочу использовать как a, так и "a" в функции.

Может кто-нибудь помочь?

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Вы можете использовать макрос, чтобы передать как указатель на вашу структуру, так и ее имя действительной функции.

struct bar {
    // blah
};

void actual_foo(struct bar *b, char *bname) {
    // whatever
}

#define foo(bar) actual_foo(&(bar), #bar)

int main() {
    struct bar b;
    foo(b);
}
1 голос
/ 14 сентября 2011

Лучшее, что вы можете сделать в C, это использовать один макрос для определения как строки, так и переменной. Нет проверки времени выполнения, которая позволила бы вам заново открыть имя переменной.

0 голосов
/ 14 сентября 2011

Вы можете сделать это, превратив функцию в макрос и используя оператор # (stringification), чтобы получить имя аргумента hte.

Например:

#define MYFUNC(x) \
do { real_func(x); printf("parameter name: " #x "\n"); } while (0)
...