関数が順番通りに呼ばれているかプログラム内で確認する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

関数が順番通りに呼ばれているかプログラム内で確認する

#1

投稿記事 by dic » 15年前

最近はオブジェクト指向が流行ってますが、私は構造体設計でいこうかとしてます
そこで、構造体設計で重要な、順番通りに関数(モジュール)を呼び出しているか確認する機能を
作りたいと考えました
下は実装してみて、いまのところうまくいってるのですが、どこか漏れなどないでしょうか?
もしくは、なんらかこういったライブラリがあるなどあったら教えてもらえるとうれしいです
#include <stdio.h>

static    int    stack[10];
static    int    p;

//    Step1 -> 1
//    Step2 -> 2
//    Step3 -> 3

//-----------------------------------------------------
//    check
//        前回呼ばれた関数のIDがいっこまえのものか確認する
bool    check( int back )
{
    if( p == 0 )
    {
        printf( "スタックが空です\n" );
        return false;
    }

    if( p == 1 )
    {
        if( stack[p-1] == 1 )
            return true;
        else
            return false;
    }

    if( stack[p-2] == back )
        return true;

    return false;
}
//--------------------------------------------------------
//    スタックに保存する
void    add( int NEW )
{
    stack[p++] = NEW;
}

void    Step3()
{
    add( 3 );    //    この関数のIDを登録する
    if( !check( 2 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step3\n" );
}
void    Step2()
{
    add( 2 );    //    この関数のIDを登録する
    if( !check( 1 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step2\n" );
}
void    Step1()
{
    add( 1 );    //    この関数のIDを登録する
    if( !check( 0 ) )    //    前回のIDを確認する
        printf( "call error.\n" );
    else
        printf( "Step1\n" );
}

//-----------------------------------------------------
int    main()
{
    Step1();
    Step2();
    Step3();

    Step2();
    Step1();
    Step3();

    return 0;
}

Poco

Re:関数が順番通りに呼ばれているかプログラム内で確認する

#2

投稿記事 by Poco » 15年前

この手の話は環境依存になりますが、VC++なら/Ghオプションと
下のリンクにあるものを流用すれば、もっと華麗な実装に
なると思います。
#C言語で実現しようとしているんですよね?

http://www.codeproject.com/kb/threads/StackWalker.aspx

たいちう

Re:関数が順番通りに呼ばれているかプログラム内で確認する

#3

投稿記事 by たいちう » 15年前

> そこで、構造体設計で重要な、順番通りに関数(モジュール)を呼び出しているか確認する機能を
> 作りたいと考えました
> 下は実装してみて、いまのところうまくいってるのですが、どこか漏れなどないでしょうか?

何をやりたいのか全くわかりませんが、努力の方向性が間違ってませんか?
何をもってうまくいっていると判断できるのでしょうか。
stack[100]程度まで増やして、main関数からの呼び出しのバリエーションを
充実させてみてはどうかと。漏れがあるかどうか判断しやすくなります。

また前回呼び出した関数を調べるだけならば、スタックは不要です。
Step1などで、addする前にcheckすれば良いので、変数が1つだけあれば良いです。

box

Re:関数が順番通りに呼ばれているかプログラム内で確認する

#4

投稿記事 by box » 15年前

> 私は構造体設計でいこうかとしてます

構造体設計とは、何のことでしょうか?
構造化プログラミングなら、聞いたことがあるような気がします。

dic

Re:関数が順番通りに呼ばれているかプログラム内で確認する

#5

投稿記事 by dic » 15年前

>ぽこさん
参考URLありがとうございます
英語なので、読めないですが参考になります
正確に言うとCだけではなくC/C++ですね

>たいちうさん
たしかに前回呼び出した関数だけに絞ればスタックはいらないですね

>boxさん
構造化プログラミングですね
色々用語があり混乱してます(汗


何をやりたいかというと、関数を間違った順番で呼ばれたらエラーもしくは警告の
メッセージを表示する機能を追加し、コンパイラでは拾えないバグを見つけようと
してます

dic

Re:関数が順番通りに呼ばれているかプログラム内で確認する

#6

投稿記事 by dic » 15年前

解決ってことで
ご意見ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る