_v(l)在宏中的意义是什么?

时间:2019-04-04 23:19:00

标签: c macros

我正在尝试从以下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 个答案:

答案 0 :(得分:3)

line 207的vec.h中定义了_v宏:

 #define _v(var) _vec_##var

此操作在_vec_之前加var。您可以通过要求您最喜欢的编译器打印预处理器阶段的输出来进行观察(对于clang / gcc,-E标志,对于msvc,/E)。

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

扩展为:

word _vec_l = vec_len (V);

答案 1 :(得分:1)

这是一个其名称已生成的变量。该名称可能包含当前行号以使其唯一。因此,在一行中两次使用此宏可能会或可能不会起作用。

要查看宏将扩展为什么,请运行rvm install 2.3.1 --with-openssl-dir=`brew --prefix openssl` 仅预处理代码而不编译代码。对这种gcc -E计算机选项进行一些研究,它在许多类似情况下也很有帮助。