当宏以与宏后面的字符串相同的字符结尾时,使 m4 看到宏

2024-01-10

我正在开发一个使用 M4 扩展一些文件的系统,但在某些情况下我遇到了扩展问题。定义/宏命名的约定(如果可能的话我不想改变)是__<name>__(即双前导和尾随下划线。)因此,这可以正确扩展:

define(`__ROOT__', `/home/mydir')
...
__ROOT__/bin

gives

/home/mydir/bin

but,

define(`__PREFIX__', `App_Mnemonic')
...
__PREFIX___some_service

应该给出:

App_Mnemonic_some_service

但给出

__PREFIX___some_service

(即它错过了扩展)

我认为宏的尾随下划线和底层文本的有效下划线之间缺少空格会令人困惑 m4。我能做些什么吗?例如,我可以用无声大括号来分隔宏吗,例如环境变量?


看似简单,实际上,我所要做的就是在底层文本中更改以下内容:

__PREFIX___some_service

为了这:

__PREFIX__()_some_service

也许看起来有点笨拙,但它毕竟是一个宏,不需要更改宏定义。所以这可以保持原样:

define(`__PREFIX__', `App_Mnemonic')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当宏以与宏后面的字符串相同的字符结尾时,使 m4 看到宏 的相关文章

  • 创建 C++ 枚举和依赖数据结构时如何避免重复? [复制]

    这个问题在这里已经有答案了 可能的重复 枚举到字符串 如果无效 未找到 则返回枚举整数值 https stackoverflow com questions 10175260 enum to string return the enum i
  • 在Scheme中编写一个自动记忆器。有关宏和包装器的帮助

    我在Scheme中编写自动记忆器时遇到了一些问题 我有一个有效的 memoize 函数 它创建一个哈希表并检查该值是否已经计算出来 如果之前已经计算过 则返回值 否则调用该函数 define memoizer fun let a table
  • Q_PROPERTY:成员与读/写

    我正在阅读 Qt 5 5 关于 Q PROPERTY 宏的文档 但我不能很好地理解它 据我所知 您可以在此宏中使用关键字 MEMBER 或访问器 READ WRITE 来代替 如果您使用关键字 MEMBER 则不必编写访问器 因为您可以使用
  • 更改 Sublime Text 2 中 Alt 键的行为

    I want to be able to use the alt key in Sublime Text 2 like I can use it on the command line in iTerm For example when I
  • 这个C++宏的含义是什么?

    我不明白这个宏的含义 define DECLARE HANDLE n typedef struct n int i n DECLARE HANDLE HWND 我从中学到了C程序 表示连接参数 所以宏等于 typedef struct HW
  • C++11 嵌套宏调用?

    它在 C std 16 3 4 中说 生成的预处理标记序列 来自宏调用替换 与源文件的所有后续预处理标记一起重新扫描 以获取更多宏名称 代替 如果在替换列表扫描期间找到了被替换的宏的名称 不包括 源文件的其余预处理标记 它不会被替换 此外
  • F# 中的非类型化/类型化代码引用与宏卫生之间是否存在关系?

    我想知道 F 中的非类型 类型代码引用与宏系统的卫生之间是否存在关系 他们是否用各自的语言解决相同的问题 或者它们是不同的关注点 元编程方面是唯一的相似之处 即使在这方面 也存在很大的差异 您可以将宏的转换器视为从语法到语法的函数 就像您可
  • 让宏定义为函数返回值是不好的做法吗?

    使用定义为有条件返回值的宏有一个缺点 即仅查看客户端代码可能会在宏处退出 这一点并不明显 我正在考虑的用例是编写值和错误检查 如下所示 define WRITE CHK file param if write that returns ze
  • VBA在指定范围内查找指定单元格值并选择它

    我在创建一个宏时遇到问题 该宏将在 信息 工作表的范围内找到活动工作表中的指定值 如果在范围内找不到单元格值 那么它会给我一个消息框 指出 未找到值 我有以下内容 但它不起作用 Sub testrot Dim i As String Dim
  • 是否存在 EOF != -1 或 WEOF != -1 的常见 C 环境

    C 标准定义EOF and WEOF使用以下语言 7 21 1 输入 输出 简介 标题
  • 有没有办法用#define 代替长命名空间?

    假设我有一个很长的命名空间 我不想一直输入它 但我不想使用using namespace 任何一个 我可以为此使用 define 吗 Example define glm quat glm gtc quaternion class Came
  • 是否可以定义带有可变参数的宏,并获取每个参数的类型?

    下面是一个明显的可变参数函数 def fun xs Any 我们可以用类似的方式定义一个宏 def funImpl c Context xs c Expr Any fun 1 1 1 0 但在本例中 所有参数都键入为Any 事实上 编译器在
  • 在 Swift 中创建“forCount”控制结构

    在许多项目中 这种控制结构非常适合可读性 forCount 40 this block is run 40 times 你可以做正是如此 https stackoverflow com a 4844280 294884在 Objective
  • C++ 没有 DELETE 宏的原因

    在那儿任何好的理由 也许除了 宏是邪恶的 不使用以下宏 define DELETE ptr if ptr NULL delete ptr ptr NULL define DELETE TABLE ptr if ptr NULL delete
  • getchar() 和 putchar() 是函数还是宏?

    我引用了两个可靠的信息来源 两者似乎对同一事物有不同的定义 http www cplusplus com reference clibr E2 80 A6 http www cplusplus com reference clibr E2
  • 可以用宏获取评论吗?

    我试图解析一些代码并重新格式化它们 但似乎引用只会忽略注释 有什么办法可以实现这一点吗 我想我必须深入 erlang 方面 不 您无法在宏内获取代码注释 它们永远不会成为 AST 的一部分 并且仍然被丢弃在 Elixir 的标记器中
  • 有没有办法在 MATLAB 中执行函数内联?

    我可以使用什么语言功能或开箱即用的技巧来完成 MATLAB 中的函数内联 令人烦恼的是 Google 搜索 matlab 内联函数 http www google com search q matlab inline function揭示了
  • 在 m4 中,如何包含名称中包含环境变量的文件?

    我想在 m4 文本中包含一个相对于我的沙箱基目录的文件 而不使用 I switch 到目前为止 我已经弄清楚如何使用系统调用来获取环境变量 define MODEL ROOT syscmd printf MODEL ROOT dnl 接下来
  • 如何驯服 Windows 标头(有用的定义)?

    在其中一个答案中this https stackoverflow com questions 1394132 macro and member function conflict问题jalf https stackoverflow com
  • 如何调用使用 Define 创建的 GNU make 宏?

    在我的 Makefile 中调用 GREP 的两种方式有什么区别吗 我有什么理由应该使用其中之一 两者似乎产生相同的结果 define GREP word 3 shell echo define FOO 0xfff00100 endef a

随机推荐