【问题标题】:GCC Preprocessor Output with Comments and Includes (but not expanded)带有注释和包含(但未扩展)的 GCC 预处理器输出
【发布时间】:2021-10-21 01:21:54
【问题描述】:

我正在寻找一种方法来生成包含 cmets 和标头包含的预处理输出,因为我想为 C 创建一个 TypeInfo 生成器(The TypeInfo 将用于解析类型和结构,因为它将被包含并与项目一起编译)。 我知道你可以这样做:

gcc -E -CC -dI "file.c" -o "file.i"
  • -E 获取预处理后的输出
  • -CC 保留所有 cmets(即使来自宏扩展)
  • -dI 保留包含 (#include ..)

但它仍然会粘贴那些包含的内容(这只是我的方式),有什么方法可以删除这些内容吗?如果没有,是否有更好的预处理器,如 GCC?

【问题讨论】:

    标签: gcc c-preprocessor preprocessor


    【解决方案1】:

    只需对输出进行后处理,解释linemarkers

    例子:

    $ cat foo.c
    #define quote(s)        #s
    #include <fcntl.h>
    
    quote(O_RDONLY) = O_RDONLY
    
    $ cc -E -CC -dI -xc - < foo.c |
      perl -ne 'print unless /^# \d+ "(?!<stdin>")/../^# \d+ "<stdin>"/ or /^# \d+/'
    
    #include <fcntl.h>
    
    
    "O_RDONLY" =
                     00
    

    【讨论】:

    • 我想到了...但我担心它会在编译过程中增加太多额外的时间,因为 TypeInfo 输出用于编译项目。我将编辑我的问题以提及...
    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2021-10-16
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多