【问题标题】:Is there a standalone C++ source preprocessor? [closed]是否有独立的 C++ 源代码预处理器? [关闭]
【发布时间】:2009-10-29 18:04:58
【问题描述】:

是否有独立的 C++ 预处理器?我不需要编译器/链接器,也无法安装完整的工具包。

我希望能够使用我提供的一些定义和包含路径来获得一些标头的预处理版本。

编辑:我不能依赖任何可用的东西。没有 cl,没有 gcc,什么都没有。我至少需要做一些处理宏的事情(特别是 #ifdef 和 #if )。

编辑:我在 Windows XP 计算机上使用它。

【问题讨论】:

  • 独立的?从来没听说过。然而,gcc 包含一个预处理器(参见 gcc -E)
  • 您要为什么操作系统获取预处理器? UNIX 系统一般都安装了 cpp。对于 Windows,cl.exe 只有在您为其提供正确的命令行选项时才能进行预处理。

标签: c++ windows c-preprocessor


【解决方案1】:

cpp 是您正在寻找的。不过,我不确定它是否可以在 gcc 发行版之外获得

CPP(1)                                                                 GNU                                                                 CPP(1)

NAME
       cpp - The C Preprocessor

SYNOPSIS
       cpp [-Dmacro[=defn]...] [-Umacro]
           [-Idir...] [-Wwarn...]
           [-M|-MM] [-MG] [-MF filename]
           [-MP] [-MQ target...]
           [-MT target...]
           [-P] [-fno-working-directory]
           [-x language] [-std=standard]
           infile outfile

Only the most useful options are listed here; see below for the remainder.

DESCRIPTION
       The C preprocessor, often known as cpp, is a macro processor that is used automatically by the C compiler to transform your program before
       compilation.  It is called a macro processor because it allows you to define macros, which are brief abbreviations for longer constructs.

【讨论】:

    【解决方案2】:

    许多编译器都有一个命令行选项,可以满足您的需求。

    例如,GCC 是 -E,MSVC 是 /P

    【讨论】:

    • 所有 gcc 都会调用正确的应用程序来完成工作。 gcc/g++ 在 linux/unix 环境中都使用 cpp。
    【解决方案3】:

    您可能想查看Boost Wave。它是一个作为库而不是应用程序构建的预处理器,但是在它周围放置一个包装器以将其变成一个独立的程序应该是相当简单的(你要做的大部分事情就是将它们连接起来,这样它就知道要保存哪些文件读取和写入)。

    【讨论】:

    • 我很确定我已经看到过这样的包装,虽然我不完全确定这是否是包装的一部分。
    • 应用程序被称为“Wave driver”。它有效。
    【解决方案4】:

    您可能想看看GPP, Generic Pre Processor。它是可定制的,但看起来它带有一些预定义的设置,可以进行 C/C++ 预处理。

    编辑:看起来 -C 是要使用的设置

    -C cpp 兼容模式。这是 gpp 的行为最接近 >cpp 的模式。与默认模式不同,元宏扩展只发生在>行的开头,C cmets和strings都可以理解。

    【讨论】:

    • 它可以在 Windows 上运行吗?
    • en.nothingisreal.com/wiki/GPP 的版本可在 Windows 和 Visual Studio 上运行,并进行了一些修改。例如,该站点上 gpp.c 的最新版本(大约 2004 年)期望定义 fnmatch。在 Windows 上,如果您使用 VS 而不是 MiniGW,则可以使用以下命令:#define fnmatch(pattern, string, flags) (!(PathMatchSpec(string, pattern) == TRUE))。如果您不生成 config.h,还有其他一些微不足道的更改
    【解决方案5】:

    http://mcpp.sourceforge.net/

    mpp 便携式 c 预处理器:

    mcpp项目被日本信息技术振兴机构(IPA)选为2002年度“探索性软件项目”之一,并再次入选2003年度项目。对于项目的成果,作者被评为最高级别程序员之一

    【讨论】:

      【解决方案6】:

      我想您可以尝试使用独立库 cpplib 构建自己的应用程序,但是虽然他们提供了它,但他们不建议以这种方式使用它,因为它“还没有达到了一个合理的稳定点。”我不知道这是真的多久了。

      【讨论】:

        【解决方案7】:

        通常,C++ 编译器会为您提供查看预处理源代码的选项。

        如前所述,使用 GCC,您可以使用:

        g++ -E ...other options... files
        

        在某些系统上,尤其是 Unix 系统上,可能有一个单独的“cpp”程序。在 MacOS X 上,它作为 /usr/bin/cpp 安装,并且是 GCC(GNU 编译器集合)的一部分。

        有时,它安装在更偏僻的地方 - 例如,在 Solaris 10 上,它是 /usr/lib/cpp。

        【讨论】:

          猜你喜欢
          • 2011-05-28
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 2013-02-04
          • 1970-01-01
          • 2011-07-02
          • 1970-01-01
          相关资源
          最近更新 更多