Что такое значение _v (l) в макросе? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь понять следующий макрос из следующего URL :

do {                                                                    \
  word _v(l) = vec_len (V);                                             \
  V = _vec_resize ((V), 1, (_v(l) + 1) * sizeof ((V)[0]), (H), (A));    \
  (V)[_v(l)] = (E);                                                     \
} while (0)

Какое значение _v (l)?Это просто переменная или что-то еще?

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

Макрос _v определен в vec.h в строке 207 :

 #define _v(var) _vec_##var

Это предваряется _vec_ до var. Вы можете убедиться в этом, попросив ваш любимый компилятор напечатать вывод этапа препроцессора (флаг -E для clang / gcc и /E для msvc).

#define _v(var) _vec_##var
word _v(l) = vec_len (V);

Расширяется в:

word _vec_l = vec_len (V);
1 голос
/ 05 апреля 2019

Это переменная, имя которой генерируется.Имя, вероятно, включает текущий номер строки, чтобы сделать его уникальным.Поэтому использование этого макроса дважды в строке может сработать или не сработать.

Чтобы увидеть, к чему расширяется макрос, запустите gcc -E, чтобы только предварительно обработать код, но не скомпилировать его.Немного изучите этот вариант компьютера -E, он также полезен во многих подобных случаях.

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