【问题标题】:How does GCC/Clang buffer preprocessed code?GCC/Clang 如何缓冲预处理代码?
【发布时间】:2022-01-05 20:42:07
【问题描述】:

在实现 C 编译器时,缓冲预处理代码的最佳方法是什么,以及 GCC/Clang 是如何做到的?他们是将输出写入单独的文件还是只是将其缓冲在内存中?

【问题讨论】:

    标签: compiler-construction


    【解决方案1】:

    预处理的结果是一个记号序列,而不是一个字符串。

    不同的编译器以不同的方式处理传入的令牌队列。上次我查看时,GCC 的 C 编译器或多或少地按需生成队列,尽管宏扩展会将多个令牌排入队列。然而,C++ 编译器更积极地标记化——我的记忆是它标记了整个 TU,但我可能记错了——因为它有时需要任意前瞻。

    无论您使用哪种策略,重要的是要了解字符流和令牌流之间的区别,并避免两次令牌化。这不仅仅是一种效率。这是一种避免微妙的预处理错误的方法。查看旧版本的 Visual C 以获得丰富的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多