functree

ユーザからのメールに対する回答。

>functreeで質問があります。
>①. #ifを無視して、tree構造を出力する方法はありますか?

質問の意味がよくわからないのですが、
例えば、以下のようなソースの場合、
-----------------------------
void foo() {
#if 1
    sub1();
#else
    sub2();
#endif
}
-----------------------------
filename.c  1       foo()
filename.c  3         +-- sub1()
filename.c  5         +-- sub2()
と両方の関数が出力されると言うことでしょうか?
ならばムリです。



ただし、①の場合、以下のようにfunctreeのソースを変更し、ビルドし直すとできます。
tre_find.c 432行目付近です。
------------------------------------------------------
		//	全ネストにおける定義が真か?
		eval = TRUE;
		for( i=0; i<Parser.pri_nest; i++ ) {
			eval &= Parser.pri_stat[i];
		}
		// 偽の領域なら、次のディレクティブがくるまで繰り返す。
eval = TRUE;    // ←ココを追加
		if( eval == FALSE ) {
			// 先頭が#で始まるならディレクティブ
			for(;;) {
				Parser_skipBrank();
				ch = Parser_getChar();
				if( ch == '#' ) break;
				Parser_skipDirectiveLine();
			}
		}
	} while( eval == FALSE );
}
------------------------------------------------------
この要望は少ないと思われるので、functreeにこの機能を追加する予定はありません。
が、改造して使うのは構わないので、この方法でよければ使ってください。