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にこの機能を追加する予定はありません。 が、改造して使うのは構わないので、この方法でよければ使ってください。