首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用m4进行条件编译/解释

使用m4进行条件编译/解释
EN

Stack Overflow用户
提问于 2018-05-27 07:24:48
回答 1查看 243关注 0票数 2

我想使用m4作为缺少此功能的几种不同脚本语言的预处理程序。

特别是,我需要模拟条件代码包含的C预处理器(cpp)功能:

代码语言:javascript
复制
#if something

some
long
code
block

#else

alternate
code
block

#if something-else

do
more
stuff

#endif

#endif

m4的ifelse()并不特别适合长代码块,因此,我似乎基本上需要编写m4宏来模拟这种情况,方法是测试条件,然后使用divert适当地包含或排除块。

棘手的部分是跟踪嵌套级别;据我所知,要做到这一点,我必须在m4中实现自己的堆栈。这在概念上似乎很简单,而且我确信,经过一两天的黑客攻击,我就可以拥有一个工作的系统。

但这感觉就像重新发明轮子--我肯定不会是第一个有这种需求的人。现有的、经过测试的、健壮的解决方案肯定比我作为m4级别初学者所能破解的任何解决方案都要好。

这方面有常见的m4成语吗?是否存在开放源代码的m4代码来执行此操作?在搜索引擎里闲逛找不到任何有用的东西。

(使用cpp本身不起作用,原因在cpp自己的文档中给出:“它会被不遵守C的词法规则的输入阻塞。”gpp似乎有这个现成的功能,所以使用这个功能可能更有意义,但如果让m4这样做并不太痛苦,我更喜欢m4的无处不在。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 01:13:12

我也在找这个,最后写了我自己的。下面是到我的wiki上的代码的链接:

http://www.eugeneweb.com/wiki/Sites/M4Macros

我定义了没有#'s的名称,例如。如果,否则,ENDIF等等. M4也要求parens保存CPP (大多数情况下)不存在的参数。我还添加了一个选择性调用,以保护具有副作用的宏不受未选择块调用的影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50549946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档