C言語 グローバル変数を避ける方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
takumi@0832080.com
記事: 38
登録日時: 13年前

C言語 グローバル変数を避ける方法

#1

投稿記事 by takumi@0832080.com » 13年前

C言語で関数を作る際に例えばtest関数を作るとする.
[test関数の処理内容]
条件がTUREならtest_sub関数を呼び出しリターン文する.
条件がFALSEならtest関数を再帰呼び出しする.

[test_sub関数の処理内容]
条件がTUREならcounter,counter2を加算してリターン文
条件がFALSEならリターン文

コード:


void test(){
if(条件文){
test_sub();
return ;
}
test();

}

void test_sub(){
if(条件文){
counter++;
counter2++;
}
return ;
}

この状況でcounter,counter2で計算した値を関数定義の存在するファイルと別のファイルで使いたいとします.
counter,counter2を外部結合の変数(extern )で解決しますが,staticやreturn を使ってうまく出来そうな気もするのですが,スマートなやり方はありませんか?(グローバル変数を使いたくない)
C++でクラスを使うといいとかもありますが,それは最終手段ということでお願いします.
(出来たらC言語文法で)

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: C言語 グローバル変数を避ける方法

#2

投稿記事 by beatle » 13年前

コード:

void test(int* counter, int* counter2)
{
    if (...) {
        test_sub(counter, counter2);
    } else {
        test(counter, counter2);
    }
}

void test_sub(int* counter, int* counter2)
{
    if (...) {
        (*counter)++;
        (*counter2)++;
    }
}
基本的にポインタを渡すようにすればいいのではないでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: C言語 グローバル変数を避ける方法

#3

投稿記事 by softya(ソフト屋) » 13年前

counter,counter2をstaticなファイル・スコープにして、counter,counter2をの値を外部に返す関数を用意するのが良いかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

takumi@0832080.com
記事: 38
登録日時: 13年前

Re: C言語 グローバル変数を避ける方法

#4

投稿記事 by takumi@0832080.com » 13年前

beatle さんが書きました:

コード:

void test(int* counter, int* counter2)
{
    if (...) {
        test_sub(counter, counter2);
    } else {
        test(counter, counter2);
    }
}

void test_sub(int* counter, int* counter2)
{
    if (...) {
        (*counter)++;
        (*counter2)++;
    }
}
基本的にポインタを渡すようにすればいいのではないでしょうか。
beatle さんが書きました: counter,counter2をstaticなファイル・スコープにして、counter,counter2をの値を外部に返す関数を用意するのが良いかと思います。
ご解説有難う御座います。
再帰プログラムはあまり使わないので得意じゃなくて・・・^^;
参考にしてみます。

初級者
記事: 200
登録日時: 14年前

Re: C言語 グローバル変数を避ける方法

#5

投稿記事 by 初級者 » 13年前

FALSE(偽)の反対語はTRUEです。
TUREではなく。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: C言語 グローバル変数を避ける方法

#6

投稿記事 by beatle » 13年前

引用元は正確にしてください。2つめの引用は僕が書いたものではなくてsoftyaさんの投稿です。

閉鎖

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