1

一部の C/C++ ソース コード内から特定の関数を出力する簡単な方法を探しています。たとえば、test.c にいくつかの関数が定義されているとします。これらの関数の 1 つだけに関連付けられたソース コードを印刷できるようにしたいと考えています。

編集:申し訳ありませんが、最終目標についてもう少し明確にする必要があります。wc関数を画面に出力して、この特定の関数の単語数を取得できるようにします。また、これをコマンドラインツールチェーンの一部にしたいので、ファイルを手動で入力してテキストを選択するオプションはありません。

4

3 に答える 3

2

doxygenを介してプロジェクトを実行できます。すべての関数 (およびクラス、構造体など) にインデックスを付け、複数の形式(PDF と HTML を含む、どちらも簡単に印刷可能) で利用できるようにします。

于 2009-02-12T00:24:07.937 に答える
0

私は通常、 内のprint-region(またはできればprint-region-with-faces) を使用しますemacs。ただし、自動化されていないため、手動でリージョンを選択する必要があります。

他の言語でも動作します。


コメントのTom Smithによる以下:

(defun print-fn (interactive) 
   (save-excursion (mark-defun) 
   (print-region)))

これが気に入った場合は、Tom のユーザー ページへのリンクをたどって、彼があなたの投票に値するかどうかを確認してください...


この CW を作成するので、Tom の優れた考えに投票する人々から利益を得ることはありません。乾杯。


明確化後に編集:これは、OPの実際の質問を指していないようです。ああ。

于 2009-02-11T23:56:21.640 に答える
0

関数を出力することの最終目標は何ですか?

これを次のように使用しますか:

if (error == Foo())
{
    PrintFunction(foo);
    exit(1);
}

エラーの場所を出力する簡単な方法があります。あなたがこれで解決しようとしている問題をよりよく理解していれば、もっと役立つかもしれません。

このような PrintFunction() を実装する方法のアイデアについては、次のとおりです。

  1. 関数をラップし、関数行の開始、関数行の終了、およびおそらく関数へのポインターを含むデータ構造体を用意します。
  2. ソース ファイルの番号に基づいて行を出力する関数を作成します。 __FILE__ソースファイル名を提供します。
  3. コード内の関数の開始位置と終了位置がわかれば、関数の出力は簡単になります。

これには、関数がファイル内にある場所の行番号を更新する必要があるという厄介な落とし穴があります。しかし、これはマクロで解決できるかもしれません。

于 2009-02-12T00:11:41.540 に答える