【问题标题】:How to change GCC preprocessor output format?如何更改 GCC 预处理器输出格式?
【发布时间】:2013-07-01 03:08:59
【问题描述】:

如何将 gcc 预处理器 (cc1.exe) 输出更改为这种格式:

 #line 1 "path/to/file.c"

目前,我得到的是这种格式:

 # 1 "path/to/file.c"

它还声明here 输出是#line 指令,但我得到了不同的输出格式。是否有我需要使用的参数选项?

【问题讨论】:

  • cc1 是 C 前端,而不仅仅是预处理器(我认为处理已集成到前端)。通常预处理器的输出只是直接馈送到编译器的其余部分。为什么你需要改变它?
  • 对我自己来说,我想这样做是因为我想对yacc的输入进行预处理;但是yacc 只理解#line 指令,而不理解# <n> 指令。

标签: gcc c-preprocessor


【解决方案1】:

最简单的答案,只需编写一个脚本来处理 gcc 预处理器生成的文件以满足您的要求。

  1. 自己写一个脚本,以GCC预处理器的输出为输入,将# 1替换为#line 1,命名为myscript
  2. 先编写一个脚本自动调用 GCC 预处理,然后调用你的脚本myscript
  3. 将上面的脚本命名为第2步--gcc,放到本地PATH中。

【讨论】:

  • 其实我一直在寻找更简单的东西,比如添加一个参数选项。
【解决方案2】:

根据GCC docs

源文件名和行号信息通过表格的行来传达

# linenum filename flags

这些被称为线标记。它们根据需要插入到输出中(但从不在字符串或字符常量中)。它们意味着以下行源自文件 filename 的行 linenum

您引用的来源是在谈论预处理器输入,而不是输出。 (GCC 也接受上述格式作为输入,但不能互操作。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2011-04-14
    • 2022-01-21
    相关资源
    最近更新 更多