6

C++ ベースのソース コードを考慮して、インターフェイスの有無にかかわらずメソッドのプレーン テキスト リストを出力できるツールを探しています。これは、メソッドの名前または完全なインターフェイスのシグネチャのみの 2 つのオプションを意味します。

これを C のソースコードにも適用したいと思います。

ありがとう。

4

2 に答える 2

4

Doxygen の XML 形式とそれを解析するための小さな Python スクリプトを使用して、妥当なソリューションを簡単に構築できます。Doxygens XML 出力は十分に文書化されていませんが、かなり完全なようです。

これが私のpythonスクリプトです:

import lxml.etree
import glob

prefix = "/Code/stack_overflow_examples/list_functions_by_doxygen/"

for filename in glob.glob("xml/*.xml"):
    f = open( filename, "r" )
    xml = lxml.etree.parse(f)
    for x in xml.xpath('//memberdef[@kind="function"]'):
        srcfile = x.xpath('.//location/@file')[0].replace(prefix,'') 
        srcline = x.xpath('.//location/@line')[0]
        definition = x.xpath('.//definition/text()')[0] 
        args = x.xpath('.//argsstring/text()')[0]
        print( "%s:%s: %s%s" % ( srcfile, srcline, definition, args) )

このファイルで実行すると:

/**
 * This is a test function.
 */
int a_function( Baz & b )
{
  return 7;
}

void another_function( Boo & b )
{
}

class Foo
{
  private:
    int a_private_member_function();
  public:
    int a_public_member_function();
};

次の出力が生成されます。

test.cpp:16: int Foo::a_private_member_function()
test.cpp:18: int Foo::a_public_member_function()
test.cpp:5: int a_function(Baz &b)
test.cpp:10: void another_function(Boo &b)

「ドキュメント」の生成に使用する Doxyfile にいくつかの変更を加えるだけです。使用した変更は次のとおりです。

EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_METHODS = YES
EXTRACT_ANON_NSPACES = YES
CASE_SENSE_NAMES = YES

GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_XML = YES
于 2012-09-11T07:17:12.537 に答える