C预处理程序:动态#Define创建

乔丹·麦贝恩

我想扩展这些C预处理程序行:

#define _POUND_ #define
_POUND_ _FALSE 0
_FALSE

扩展,所以最后一行(即_FALSE)扩展为0。我知道递归CPP不可能直接实现,但可以做到。不幸的是,我不确定我是否完全遵循此链接中介绍的逻辑。

我认为我需要强制进行额外的评估,但是在这种情况下(例如,我尝试过并失败了),我不知道该怎么做。

你能帮我吗?

约翰·布林格

如注释中多次指出的,不支持您要查找的内容。这是标准必须说明的内容:

预处理指令由预处理标记,其满足以下约束的序列组成:所述序列中的第一令牌是预处理令牌(在翻译阶段4的开始)或者是源文件中的第一个字符(后任选白色不包含换行符的空格)或紧随包含至少一个换行符的空格的空格。

(C2011,6.10 / 2;已添加重点)

翻译阶段4是执行预处理指令的阶段,因此,阶段4进行宏扩展不能导致真正的预处理指令的创建。宏可以扩展为具有预处理指令形式的文本,但是此类文本实际上不能成为指令。

的确,对宏扩展产生的文本进行了重新扫描以查找更多的宏以进行扩展,但是该过程并不涉及识别尚不存在的预处理指令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

#define之外的C预处理程序串联

来自分类Dev

通过#define预处理程序指令覆盖C ++中的“ endl”

来自分类Dev

#define预处理程序如何真正在C中工作

来自分类Dev

您如何测试两个#define与C预处理程序是否相同

来自分类Dev

C预处理程序:#define可以在没有括号的情况下调用的宏

来自分类Dev

预处理程序指令#define在.Xresources中不起作用

来自分类Dev

C预处理程序指针混乱

来自分类Dev

for循环中的C预处理程序串联

来自分类Dev

C预处理程序是否在运行?

来自分类Dev

扩展单个C预处理程序指令

来自分类Dev

C预处理程序是否删除“&*”的实例?

来自分类Dev

C预处理程序:及早评估宏

来自分类Dev

C ++预处理程序串联操作

来自分类Dev

C预处理程序删除结尾的逗号

来自分类Dev

C预处理程序宏扩展串联

来自分类Dev

C中的预处理程序指令

来自分类Dev

C预处理程序宏多个参数

来自分类Dev

C预处理程序的默认添加

来自分类Dev

C预处理程序指令和链接

来自分类Dev

解释C预处理程序代码

来自分类Dev

C预处理程序如何工作?

来自分类Dev

C预处理程序宏扩展串联

来自分类Dev

C预处理程序是否在运行?

来自分类Dev

动态创建 JavaScript 处理程序

来自分类Dev

多个动态创建控件的C#事件处理程序

来自分类Dev

C预处理器#define SQR(x)(x * x)

来自分类Dev

C预处理程序如何处理循环依赖关系?

来自分类Dev

此预处理程序指令C / C ++所需的说明

来自分类Dev

此预处理程序指令C / C ++所需的解释