#行并跳到行
时间: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错误消息,但会引用附近的原始输入文件。