C++ 什么是语法?

C++ 什么是语法?,c++,c-preprocessor,C++,C Preprocessor,我通读了一些示例代码,了解了这个我以前从未见过的##语法。代码示例如下所示: #define DEF_MAKE_BT_1_COMP(BT)\ inline i_##BT make_i_##BT(i_##BT::vtype x) { return make_##BT(x); } #define DEF_MAKE_BT2(T) \ DEF_MAKE_BT_1_COMP(T##1); \ DEF_MAKE_BT_2_COMP(T##2); DEF_MAKE_BT

我通读了一些示例代码,了解了这个我以前从未见过的##语法。代码示例如下所示:

#define DEF_MAKE_BT_1_COMP(BT)\
inline i_##BT make_i_##BT(i_##BT::vtype x) { return make_##BT(x); }

#define DEF_MAKE_BT2(T)         \
DEF_MAKE_BT_1_COMP(T##1);           \
DEF_MAKE_BT_2_COMP(T##2);

DEF_MAKE_BT2(double);
当我在最后一行得到错误时,“make_double1”是未定义的。以前有人见过这种语法吗?

##
是连接两个令牌的预处理器运算符

替换列表中任意两个连续标识符之间的##运算符对这两个标识符(首先不是宏展开的标识符)运行参数替换,然后连接结果。此操作称为“连接”或“标记粘贴”。只能将构成有效令牌的令牌粘贴在一起:构成较长标识符的标识符、构成数字的数字或构成+的运算符+和=。无法通过粘贴/和*创建注释,因为注释是在考虑宏替换之前从文本中删除的。如果连接的结果不是有效的标记,则行为未定义


令牌连接。这样问了好几次,回答了好几次。与以往一样,困难在于找到正确的问题,使其成为.concatenate的副本。请参阅。@LưuVĩnhPhúc-如果我记得的话,谷歌不允许在搜索中使用特殊字符,如磅符号。或者它不尊重他们。例如前五页有0个相关结果。您必须使用不同的搜索引擎才能获得最佳结果。这里,“best”与原始搜索词相关,而不是与答案相关。@jww您可以在Google上搜索一些特殊符号,尽管这有点困难,所以我需要使用“double hash symbol”,它很有效。您也可以使用