#行并跳到行

时间:2020-03-05 18:49:41  来源:igfitidea点击:

是否有任何编辑者对goto线要素使用C #line指令?

语境:
我正在使用代码生成器,需要跳转到输出的一行,但是该行是相对于我要添加的#line指令指定的。
我可以放下它们,但是发现输入线更糟

解决方案

回答

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

但是,后编译文件的常规文件扩展名是.i或者.gch,因此我们可以尝试使用该扩展名,然后看看会发生什么。

回答

我偶尔在头文件中使用以下命令在
VC6和最近的VS(2003+)编译器输出窗口。

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

这是基于Microsoft编译器对"编译提示"的处理。

这与要求不完全相同...但是通常可能会有所帮助
在达成目标时,我们可以让编译器发出某些编辑可能会喜欢的东西。

// 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")

我已经有一段时间没有尝试过了,但它仍然可以正常工作。

回答

如果编辑器可编写脚本,则应该可以编写脚本进行导航。甚至可能有一个Vim或者Emacs脚本已经执行了类似的操作。

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

对于这里可能感兴趣的任何人来说,都是特定的宏脚本。

回答

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