• 締切済み

Cプログラムの解析(関数の呼び出し関係など)

仕事で必要なため、C言語の勉強をしています。 既存のプログラムに変更を加えるのために、膨大な量のソースコードを ながめて関係を把握しようとしているのですが、効率のよいやり方が わかりません。 バグのない盛り込みをするために、関数の呼び出し関係などを検索して 調べEXCELに書き出したりなどしているのですが、限界を感じています。 ツールをいくつか試用してみたのですが、どうもしっくりくるものが ありません。 例えば、 func_a() -> func_b() -> func_c() -> func_d() という関係 になっているものがあったとして、func_a() -> func_b()や func_b() -> func_c()の関係は表示できても、 func_a() -> func_b() -> func_c() の関係は一度に表示できず、 自分の頭の中で組み合わせて覚えておかなければならないなど.. みなさんは、ソースコードを解析し、その結果を把握して変更を加える際、 どうされているのでしょうか? アドバイスよろしくお願いします。

  • 044128
  • お礼率65% (117/180)

みんなの回答

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.3

私は、cflowというツールを使っています。 実行オプションで解析する呼び出し階層数を指定することができます。

参考URL:
http://www.gnu.org/software/cflow/
  • driverII
  • ベストアンサー率27% (248/913)
回答No.2

ある会社では、表示用のプログラムを作ってましたね。 ツリー型で全てを一度に表示できるものです。 Cでは、言語解析がしやすいので、作ろうと思えばすぐ できるでしょう。 良い開発環境を使えば、いらないようにも感じますが・・・・ ちなみに Windows環境,UNIX(LINUX)環境のどちらなんでしょうね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

私はDoxygenをよく使っています。それ以外はgrepでどうにかなります。

参考URL:
http://www.doxygen.org/

関連するQ&A

  • プログラム

    アドバイスをもとにいろんなサイトを見てみたんですが、なんとなくはわかるんですがこれから先どうしたら良いかわかりません。a,bを入力する画面まではいくんですが、それから先の結果がでないんです。何がいけないんですか? #include <stdio.h> double func(double x){ double y; y=x*x*x-3*x*x+9*x-8; return(y); } int main(){ double EPS=0.00005; double a, b, c; char t; int i=0; do{ printf(" a = "); scanf("%lf%c", &a, &t); printf(" b = "); scanf("%lf%c", &b, &t); if(func(a)*func(b) >= 0){ printf(" f(a)*f(b)>0\n\n"); } }while(func(a)*func(b) >= 0); if(b-a<0){ c=a; a=b; b=c; } while(b-a>EPS){ c=a-((b-a)/(func(b)-func(b)))*func(a); if(func(c)*func(a)<0){ b=c; }else{ a=c; } i++; printf(" %d\t%20.15f\n",i,c); }

  • C#の静的コード解析ツール

    C#の静的コード解析ツールについて調査しています。 そこで一点疑問なのですが、これらのツールでは何が検知できるのでしょうか。 例えば到達不可能なコードパスや、未初期化変数の参照等、 解析ツールの紹介でよく見られる「検知できること」は、 そもそもVisual Studioがビルド時にエラーや警告として教えてくれます。 C#の静的コード解析ツールは、こういったIDEが検知するバグ以外に、 どういったものを見つけてくれるのでしょうか。 製品によって異なるということは承知していますが、 何かご存知の方いらっしゃいましたら、一例だけでも教えて頂けるとありがたいです。

  • 恥ずかしながらC言語解析中のプログラムで!?

    練習問題 5-20 列数を示す数値を入力し、'a'~'z'の文字を指定された列数に従って表示するプログラムを作成しなさい。  以下のプログラムを解析中で、まだ素人で基本的な質問ですがご了承ください。 1) int col; /* 2) char i;/*文字列関数*/ 3) scanf( "%d", &col ); /*英数文字の行に並ぶアルファベットの個数を1~26までの任意の数字を一件入力する。*/ 4) for( i = 0 ; i < 26 ; i++ ){ /*アルファベットは26個はa b c・・・の順番でループする命令*/ 5) if( i > 0 && ( i % col ) == 0 )/*アルファベットのループ範囲はa~です。アルファベット26文字÷3)で入力した数の余りが0・・・? 6) printf( "\n" ); /*結果がでたら改行する。*/ 7) printf( "%c", 'a' + i ); /* 現在解析中*/ 8) } -----------------------------------------------------------------  以上ですが、  5)の==0で、このプログラムでの役割は何ですか?  よろしくお願いいたします。

  • 関数でエラー

    #include<stdio.h> int func(int, int); int main() { int a, b, c; a = 10; b = 20; c = func(a, b); printf("%d x %d" = %d\n", a, b, c) return 0; } int func(int a, int b) { int c; c = a * b; return c; } エラーが出てしまうのですが、どうしてエラーが出るのか教えて頂けないでしょうか? エラー一覧です。 ------------------------------------------------------------------------------------------------------------------------------- 配列型 const char[8]を割り当てることはできません。 14行目 ;がreturnの前にありません              16行目 式は変更可能な左辺値である必要があります      14行目 ;が必要です                     16行目 よろしくお願いします。

  • htmlソースを解析、日本語部分がよくわからない

    htmlソースを解析しようと思ったのですが、日本語部分がバイト表現のようなものになっています。 (thunderbirdでソースを見ています) 例えばメールでは「注文内容」となっている部分はhtmlソースでは以下のようになっています。 =E6=B3=A8=E6=96=87=E5=86=85=E5=AE=B9=EF=BC=9A ヘッダの文字コードはutf-8になっていました。 このバイト表現はどのような文字コードなのでしょうか? またPHPやVBA、C#などで日本語への変換は可能でしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • HTML
  • 単変量解析から多変量解析時の因子の絞り込み

    統計に関して全くの素人です。 教えていただきたい点は、ある病気の予後に関して関係があると予想した因子A,B,C,D,E,Fに関して単変量解析をしたら、A,B,Cが有意と考えられた場合、次に多変量解析を行う場合は、A,B,C,D,E,Fのすべての因子で解析して判断すべきでしょうか?それとも関連がありそうなA,B,Cによるモデルで解析するべきでしょうか? また、一般に単変量解析で関連がなかった因子が多変量解析では有意となることはないのでしょうか? 以上よろしくお願いします。

  • C言語 プログラム

    文字列a[]と文字列b[]があり、a[]に含まれるb[]の文字すべてを@に変更する関数mikan[]を教えてください。 また、関数mikan[]を用いて、2つの文字列a[]とb[](空白は含まない)を入力すると関数mikan[]によって変更されたa[]を表示するプログラムを教えてください。よろしくお願いします。 (例 a[] :"a+b+c=abc" b[] :"a=" 上記だったら a[] :"@+b+c@@bc"

  • どれだけ似ているかを統計的に解析

    5つのグループがありまして、10個の指標を計測しています。 どれだけ似ているかをグラフ等に表示したいのですが、 どのようにしたらいいのでしょうか? 例えば A,B,C,D,Eグループがあって 1つめの指標はAグループから順に、10%、5%、0%、12%、50%あてはまるとします。 2つめの指標はAグループから順に、1%、2%、40%、52%、0%あてはまるとします  以下10個目の指標まで同じです。 2つのグループがどれだけ離れているかを解析したいのですが、 何か解析方法はありますでしょうか? できればグラフのような形でどれとどれが似ているのか等、位置関係を図示したいのですが、何かありますでしょうか? よろしくお願いいたします。

  • どれだけ似てるかを統計的に解析

    5つのグループがありまして、10個の指標を計測しています。 どれだけ似ているかをグラフ等に表示したいのですが、 どのようにしたらいいでしょうか? 例えば A,B,C,D,Eグループがあって 1つめの指標はAグループから順に、10%、5%、0%、12%、50%あてはまるとします。 2つめの指標はAグループから順に、1%、2%、40%、52%、0%あてはまるとします  以下10個目の指標まで同じです。 2つのグループがどれだけ離れているかを解析したいのですが、 何か解析方法はありますでしょうか? できればグラフのような形でどれとどれが似ているのか等、位置関係を図示したいのですが、何かありますでしょうか? よろしくお願いいたします。

  • C言語プログラム 配列

    C言語プログラム初心者です。以下のプログラムに対して、実行結果がなぜそうなるかがわからないので、詳しく教えてください。 #include<stdio.h> int func(int a[ ],int b[ ],int n); main(){ int i,k; static int a[12] ={1,2,3,4,5,(省略)・・・,12};  static int b[12] ={21,22,23,24,(省略)・・・,32}; k = func(a,b,6); k = func(b+3,a+3,6); printf("a = "); for(i=0;i<12;i++)printf("%d",a[i]); printf("\n = b"); for(i=0;i<12;i++)printf("%d",b[i]); printf("\n k = %d\n",k); } int func(int a[ ],int b[ ],int n){ int i,x=0; for(i=0;i<n;i++);{ a[i] = b[i]; x = x+a[i]; } return(x); } 結果: a = 21 22 23 .... 26 7 8 9 10 11 12 b = 21 22 23 .... 26 7 8 9 30 31 32 k = 99

専門家に質問してみよう