令牌化时强制预处理器评估
Force Preprocessor Evaluation While Tokenizing
是否有一种方法可以强制预处理器在标记之前完全评估符号?
输入输出的例子我想要GFR_SER_##token
, GFR_SER_INT
。
作为一个例子,我正在尝试使用Boost::PP做一些预处理元编程。
对于粘贴字符串,它相当简单,因为您只需添加一个间接级别,如:
#define str(s) xstr(s)
#define xstr(s) #s
然而,这对标记化不起作用,因为#define xtkz(t) ##t
是非法的,因为表达式开头的标记语法。
我尝试使用BOOST_PP_IDENTIFY(s)
,它解决了输入,但不幸的是导致的标记化 Boost调用,如GFR_SER_BOOST_PP_IDENTIFY(s)
。对于这个问题是否有很好的解决方法?
您可以使用相同的双展开技术,但是您需要记住##
是一个二进制操作符:
#define XCONCAT(a,b) a##b
#define CONCAT(a,b) XCONCAT(a,b)
#define token INT
CONCAT(GFR_SER_,token)
通过gcc -E
运行上述命令得到:
# 1 "<stdin>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 30 "/usr/include/stdc-predef.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
# 31 "/usr/include/stdc-predef.h" 2 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"
GFR_SER_INT
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 当头文件被预处理时是否有一个预处理器选项显示?