2

goto行機能に関してC#lineディレクティブを使用する編集者はいますか?

コンテキスト: コードジェネレーターで作業していて、出力の行にジャンプする必要がありますが、その行は、追加する#lineディレクティブに関連して指定されています。私はそれらを落とすことができますが、入力行を見つけることはさらにひどい苦痛です

4

4 に答える 4

2

エディターがスクリプト可能であれば、ナビゲーションを行うためのスクリプトを作成できるはずです。すでに同様のことをしているVimまたはEmacsスクリプトさえあるかもしれません。

FWIW多くのBison/Flexxを作成するときに、同様のことを実行しようとするZeus Luaマクロスクリプトを作成しました(つまり、#lineマーカーを検索して入力ファイルから出力ファイルの対応する行に移動します)。

ここで興味があるかもしれない人にとっては、その特定のマクロスクリプトです。

于 2008-09-18T05:02:10.060 に答える
0

sed または同様のツールを使用して #lines をコンパイラによって解釈されない別のものに変換すると、実際の行で C エラー メッセージが表示されますが、近くに元の入力ファイルへの参照があります。

于 2008-09-18T20:07:33.563 に答える
0

#lineディレクティブは通常、ソース コードではなく、プリコンパイラによって挿入されるため、ファイル拡張子が.c.

ただし、コンパイル後のファイルの通常のファイル拡張子は.iまたは.gchであるため、それを使用してみて、何が起こるかを確認してください。

于 2008-09-08T22:27:35.217 に答える
0

VC6 および最近の VS(2003+) コンパイラの出力ウィンドウでクリック可能な項目を生成するために、ヘッダー ファイルで次のコードを時折使用しました。

基本的に、これは、コンパイラ出力の項目出力が本質的に「PATH(LINENUM): message」に対して解析されているという事実を利用しています。

これは、Microsoft コンパイラの「プラグマ リマインド」の処理を前提としています。

これはあなたが尋ねたものとまったく同じではありません...しかし、一部のエディターが尊重する可能性のあるコンパイラーに発行させることができるものに到達するのに一般的に役立つ場合があります。

    // 次の定義により、挿入が可能になります
    // Microsoft コンパイラの出力ストリーム内のクリック可能な項目。
    // エラーと警告のバリアントは、
    // IDE は実際の警告とエラーとして表示されます... つまり、作成できることを意味します
    // それらはタスク リストで発生します。

    // 理論的には、コーディング標準はある程度チェックできます
    // このようにして、警告またはさらにはリマインダーとして表示されるリマインダー
    // エラーが挿入されました...


    #define strify0(X) #X
    #define strify(X) strify0(X)
    #reminder(S) message(__FILE__ "(" strify( __LINE__ ) ") : " S) を定義する

    // 使用例
    #pragma reject("警告: 偽の警告")
    #pragma reject("エラー: 偽のエラー")

しばらく試していませんが、まだ動作するはずです。

于 2008-09-08T23:07:35.480 に答える