【问题标题】:C compiler preprocessor outputC 编译器预处理器输出
【发布时间】:2013-06-13 07:22:00
【问题描述】:

C 编译器支持生成带有.i 扩展名的预处理器输出文件。
据我所知,Microsoft (Visual Studio)、ARM、Keil 和一些 GNU 编译器都是如此。

他们通常为此使用编译器开关-E-P
还有编译器开关-C 来保留cmets。

预处理器文件的创建是 ANSI-C 中的标准,还是此编译器特定的?
-C 选项也是标准吗?

编辑:
更准确地说:这是关于对创建 .i 文件的支持,而不是编译器切换语法或名称。

【问题讨论】:

  • 目前没有编译器开关/选项的标准,也没有预处理器、编译器或链接器的任何形式的输出格式的标准。 C 标准甚至不假定您是在存在文件系统的操作系统上开发程序。一个 C 编译器产生一个颜色鲜艳的松果而不是文件的输出,仍然完全符合 C 标准。
  • @Lundin:所以预处理器输出只是编译器开发人员提供的功能?我害怕那个。

标签: c compiler-construction c-preprocessor


【解决方案1】:

在 ISO C 标准中没有标准化。

然而,大多数编译器似乎都有 -E 用于生成 prepro 输出。这是合理的,因为 prepro 输出通常对调试非常有用。

这是我检查过的编译器列表:

  • 海合会
  • pcc
  • 叮当
  • ctc(三核)
  • 任务 C166
  • 风河 (DIAB)

所有这些编译器都允许将 prepro 输出写入任何文件(具有任何扩展名)。 .i 绝对不是标准的。

保留 cmets 的选项 -C 似乎相当具体。

【讨论】:

    【解决方案2】:

    C 编程语言标准没有具体说明如何调用编译器。

    它可能是一个“临时”标准,但它不是以任何官方方式“全球”控制的东西。有本地标准,例如 POSIX 可以指定此类内容,但这当然不包括为非 POSIX 环境实现的编译器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2011-02-18
      • 2019-05-28
      • 2012-02-20
      • 2020-10-12
      • 1970-01-01
      • 2012-03-13
      相关资源
      最近更新 更多