#line并跳转到线

时间:2008-09-08 22:10:00

标签: preprocessor text-editor

是否有任何编辑遵守关于goto line功能的C#line指令?

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

4 个答案:

答案 0 :(得分:2)

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

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

对于任何可能对该特定宏脚本here is感兴趣的人。

答案 1 :(得分:0)

#line指令通常由预编译器插入,而不是插入到源代码中,因此如果文件扩展名为.c,编辑人员通常不会遵守该指令。

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

答案 2 :(得分:0)

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

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

这假定Microsoft编译器对“pragma remind”的处理。

这不完全是你问的......但它可能通常很有帮助 在达到某些东西时,你可以让编译器发出一些编辑可能会尊重的东西。

    // The following definitions will allow you to insert
    // clickable items in the output stream of the Microsoft compiler.
    // The error and warning variants will be reported by the
    // IDE as actual warnings and errors... which means you can make
    // them occur in the task list.

    // In theory, the coding standards could be checked to some extent
    // in this way and reminders that show up as warnings or even
    // errors inserted...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #define remind(S) message(__FILE__ "(" strify( __LINE__ ) ") : " S)

    // example usage
    #pragma remind("warning:  fake warning")
    #pragma remind("error:  fake error")

我有一段时间没试过,但它仍然有用。

答案 3 :(得分:0)

使用sed或类似工具将#lines转换为其他未被编译器解释的工具,因此您在实际行上获得C错误消息,但引用了附近的原始输入文件。