【问题标题】:Generic preprocessor: How to use for any kind of file?通用预处理器:如何用于任何类型的文件?
【发布时间】:2015-05-08 14:32:21
【问题描述】:

我想知道是否有人使用通用预处理器来处理文本文件。

这个想法出现了,因为Java没有预处理器,但我想进行条件代码编译等。

现在,进一步考虑这个想法,我不妨对需要频繁编辑的任何类型的文件使用通用预处理器,但所有编辑都采用类似的方式。

现在,当我使用 C 预处理器时,我想使用一个不错的 m4 并且有 GPP,但是那个停止了2007年开发。

我想要一些更可取的预处理器的建议,如果可能的话,它应该采用与 C 预处理器采用相同方式的指令 #define SOMETHING

由于 m4 不使用印记或其他东西,它可能会与其他代码发生冲突,当 m4 是要走的路时,我需要有关如何为每个指令加上印记或不同前缀或其他东西的建议。

【问题讨论】:

    标签: preprocessor m4


    【解决方案1】:

    大多数 C/C++ 编译器允许您只运行预处理器并保存输出,并可用于通用输入。 (对于 Visual C++,我相信选项是 /P)

    但请记住,预处理器导致的问题与它们解决的问题一样多。 C++ 和 Java 的设计者都在努力消除对使用预处理器的需求。例如,在 Java 中,代码如下:

    if (true)
         CallThis();
    else
         DoNotCallThis();
    

    只会为CallThis() 调用生成代码,而不为条件或else 分支生成代码。 (这不是实施质量问题 --- 它是 Java 语言定义的要求)。

    【讨论】:

    • 我将用 m4 进行现场测试,因为这是最常用的语言,看看我是否满意。我会在这里和那里测试 GPP,但我不确定这是否会持续下去。
    • 你是对的,预处理器指令使代码有些不可读,但我想我对此无能为力。我将它与 shell 脚本和 makefile 一起使用。反正用m4和cpp,挺麻烦的……
    【解决方案2】:

    对于“印记”,使用 m4 的命令行选项 -P 将前缀 m4_ 添加到所有内置 m4 宏。然后你有m4_definem4_divert等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2012-02-16
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2019-12-06
      相关资源
      最近更新 更多