2008-09-08 127 views
2

是否有任何編輯人員對於goto行功能遵守C#line指令?#line並跳轉至

語境: 我工作的一個代碼生成器,需要跳轉到一個線路輸出,但該行相對載明的#line指令,我加入。 我可以刪除他們,但隨後發現輸入線甚至更糟糕的疼痛

回答

2

如果編輯器是可腳本化的,應該可以編寫腳本來執行導航。甚至可能有一個Vim或Emacs腳本已經做了類似的事情。

當我寫了很多Bison/Flexx時,我寫了一個Zeus Lua宏腳本,它嘗試做類似的事情(即通過搜索#line標記從輸入文件移動到輸出文件的相應行)。

對於任何可能感興趣的人here is那個特定的宏腳本。

+1

最佳回答日期: – BCS 2008-09-18 22:22:51

0

#line指令通常是通過預編譯器插入,不進源代碼,所以編輯器通常不會兌現,如果文件擴展名是.c

但是,後編譯文件的正常文件擴展名是.i.gch,所以您可以嘗試使用它並查看會發生什麼情況。

0

我偶爾會在頭文件中使用以下內容來生成可在VC6和最近的VS(2003+)編譯器窗口的 中單擊的項目。

基本上,這利用了編譯器輸出 中輸出的項目基本上被解析爲「PATH(LINENUM):message」的事實。

這假定在微軟編譯器對「附註提醒」的處理上。

這不完全正是你所問......但它可能通常有幫助 在達到你可以讓編譯器發出的東西,一些編輯可能會榮幸。

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

我還沒有嘗試過一段時間,但它應該仍然有效。

0

使用sed或類似的工具將#lines轉換爲其他未由編譯器解釋的東西,因此您會在實際行中獲得C錯誤消息,但是會引用附近的原始輸入文件。

+0

我是這樣做的;爲代碼生成器添加一個標誌以省略#lines和重建 – BCS 2008-09-18 22:22:12