2

是否有任何编辑器尊重有关转到行功能的 C #line 指令?

上下文: 我正在开发代码生成器,需要跳转到输出的一行,但该行是相对于我添加的#line 指令指定的。我可以放下它们,但找到输入线更痛苦

4

4 回答 4

2

如果编辑器是可编写脚本的,那么应该可以编写一个脚本来进行导航。甚至可能有一个 Vim 或 Emacs 脚本已经做了类似的事情。

FWIW 当我写很多 Bison/Flexx 时,我写了一个Zeus Lua 宏脚本,试图做类似的事情(即通过搜索#line 标记从输入文件移动到输出文件的相应行)。

对于任何可能感兴趣的人来说,就是那个特定的宏脚本。

于 2008-09-18T05:02:10.060 回答
0

#line指令通常由预编译器插入,而不是源代码中,因此如果文件扩展名为.c.

但是,后编译文件的正常文件扩展名是.ior .gch,因此您可以尝试使用它,看看会发生什么。

于 2008-09-08T22:27:35.217 回答
0

我偶尔在头文件中使用以下内容在 VC6 和最近的 VS(2003+) 编译器输出窗口中生成可点击项目。

基本上,这利用了编译器输出中的项目输出本质上被解析为“PATH(LINENUM):消息”这一事实。

这假定了微软编译器对“pragma remember”的处理。

这并不完全是您所要求的......但它通常可能有助于获得一些您可以让编译器发出一些编辑器可能会尊重的东西。

    // 以下定义将允许您插入
    // Microsoft 编译器输出流中的可点击项。
    // 错误和警告变量将由
    // IDE 作为实际的警告和错误...这意味着您可以
    // 它们出现在任务列表中。

    // 理论上可以在一定程度上检查编码标准
    //以这种方式和提示显示为警告甚至
    // 插入的错误...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #define 提醒(S)消息(__FILE__“(”strify(__LINE__)“):”S)

    // 示例用法
    #pragma 提醒(“警告:虚假警告”)
    #pragma 提醒(“错误:假错误”)

我有一段时间没有尝试过,但它应该仍然有效。

于 2008-09-08T23:07:35.480 回答
0

使用 sed 或类似工具将 #lines 转换为编译器未解释的其他内容,因此您会在实际行上收到 C 错误消息,但可以参考附近的原始输入文件。

于 2008-09-18T20:07:33.563 回答