【问题标题】:#line directive and real usages#line 指令和实际用法
【发布时间】:2014-11-25 09:38:48
【问题描述】:

许多C书籍很少提及#line 指令。

他们中的许多人说这个指令被野牛工具的 yacc 使用,但没有 展示任何实际的例子。

谁能告诉我这个指令的一些实际用法或让我成为一个实用的 bison 或 yacc 的用法示例?

【问题讨论】:

  • man yaccman bison 怎么样? (不想刻薄,但文档始终是首先开始的地方)。
  • gcc -E查看预处理器的输出(对于带有#include的文件),例如(对于POSIX系统,c99 -E)。

标签: c c-preprocessor bison yacc preprocessor-directive


【解决方案1】:

从其他文件中的其他内容生成 C(或 C++)代码的任何程序或脚本也应该发出大量 #line 指令(将生成的 C 行与其他文件中的位置相关联)。

这对于诊断消息和调试器非常有用。

例如,在某个example.y 文件上运行GNU bison(解析器代码生成器),使用ANTLR,并查看生成的C 代码,或者开发然后构建,安装your GCC plugin(它可以修改源位置;另请参阅旧的 -obsolete- GCC MELT 项目,也许还有 Bismon),或查看 compilers translating to C 内部,如 Bigloo

顺便说一句,根据经验,当您开发一个严肃的 C 或 C++ 代码生成器时,您需要发出正确的 #line 指令,这对代码生成器来说是一个很大的负担。这可能需要大量的工作。

在某些情况下,您可以选择不生成 #line 指令。 2021年,我们在RefPerSys项目中做出这样的选择。

【讨论】:

  • 你能给我举个具体的例子吗?还有伪代码?
  • 您的 MELT 网站链接已过期,现在指向一家不相关的公司。当前有效的链接是 starynkevitch.net/basile/gcc-melt,但请注意该网站声明 GCC Melt 项目自 2017 年底以来处于非活动状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2019-03-25
  • 2019-11-16
  • 2016-11-01
相关资源
最近更新 更多