Использование макроса с переменными в c - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть плоский файл C, включая ctype.h, где я не могу понять, как работает макрос.Вот этот макрос

#define da_dim(name, type)  type *name = NULL;          \
                            int _qy_ ## name ## _p = 0;  \
                            int _qy_ ## name ## _max = 0

Я думал, что он должен определять тип данного значения.Так, например, я мог бы написать

int a;
da_dim(a,"char");

, чтобы преобразовать его в символ, но он этого не делает.Я могу представить, что такое «## name ##» (как заполнитель), но я не понимаю, что такое « qy » и откуда оно взято.Так для чего этот макрос, как его использовать и (возможно) как он работает?

1 Ответ

0 голосов
/ 31 декабря 2018

Макрос в C - это простой механизм замены токена.

Ваш пример:

int a;
da_dim(a,"char");

Будет расширен до:

int a;
"char" *a = NULL;
int _qy_a_p = 0;
int _qy_a_max = 0;

Итак, if расширится до ошибок, потому что у вас будет два a идентификатора, а "char" не ожидается там, где вы его размещаете.

Если вы используете gcc, вы можете «увидеть» расширения макроса с помощьюделать:

$ gcc -E your_program.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...