CスタイルでCコードを書く

2778 ワード

ラベル(スペース区切り):C言語
C言語ソースプログラムの最小単位は であり,本稿では1つのプログラムが複数の関数を含む場合に生じるいくつかの問題について論じる.
1.ローカル変数
関数体の内部に宣言された変数をこの関数の (local variable)と呼ぶ.
int sum_digits(int n)
{
    int sum = 0;//local variable
    while(n>0){
        sum +=n
        n--;
    }
    return sum;
}

ローカル変数には次の性質があります.
  • 自動保存期間:関数呼び出し時にメモリ領域が自動的に割り当てられ、関数が戻ったときに割り当てが回収され、値が保持されません.
  • ブロックの役割ドメイン:変数宣言ポイントから関数体の末尾まで.

  • C 99は、関数が最初から変数宣言を行う必要はなく、すべてのローカル変数の役割ドメインが非常に小さい可能性があります.
    2.静的局所変数
    ローカル変数宣言に単語static修飾を配置すると、自動記憶期間ではなく静的記憶期間を変数に持たせることができる.静的に格納された変数は、永続的な記憶ユニットを持つためです.したがって、プログラム実行中は変数の値が保持されます.≪アクティブ・ドメイン|Active Domain|emdw≫:静的ローカル変数のアクティブ・ドメインであり、依然としてブロック・アクティブ・ドメインです.他の関数には表示されませんが、将来同じ関数の再呼び出しのためにデータが保持されます.
    3.形式パラメータ
    形式パラメータは局所変数と同じ性質を有する.自動ストレージ期間、ブロック役割ドメイン、実際には、形式パラメータとローカル変数の唯一の違いは、関数呼び出しのたびに形式パラメータを自動的に初期化することです.
    4.外部変数(グローバル変数)
    パラメータの伝達は、関数に情報を伝達する方法です.また、関数は外部変数を介して通信することもできる.外部変数は、関数体の外部に宣言される変数です.外部変数(グローバル変数と呼ばれる場合もある)の性質は、ローカル変数とは異なります.
  • 静的記憶期間:staticと宣言されたローカル変数と同様に、外部変数は静的記憶期間を有する.外部変数に格納されている値は永続的に保持されます.
  • ファイルの役割ドメイン.外部変数にはファイルの役割ドメインがあります.変数宣言ポイントからファイルの最後まで続くため、外部変数宣言後のすべての関数に従ってアクセス(変更)できます.

  • ケース:外部変数を使用したスタックの実装
    #include
    #include
    #include
    
    #define STACK_SIZE 100
    
    int contents[STACK_SIZE];
    int top = 0;
    
    void make_empty(void) {
        top = 0;
    }
    
    bool is_empty(void) {
        return top == 0;
    }
    
    bool is_full(void) {
    
        return top == STACK_SIZE ? true : false;
    }
    
    void stack_overflow(void) {
        printf("      ,    ");
    }
    void stack_underflow(void) {
        printf("      ,    ");
    }
    
    void push(int i) {
        if (is_full()) {
            stack_overflow();
    
        } else {
            contents[top++] = i;
        }
    }
    

    上の例:配列contentsとtopは複数の関数で呼び出されるためです.ここでは外部変数を使用します.
    5.外部変数のメリットとデメリット
    複数の関数が1つの変数を共有する必要がある場合や、少数の関数が大量の変数を共有する必要がある場合、外部変数は便利です.しかし、多くの場合、関数の場合、形式パラメータによる通信は変数を共有する方法よりも優れています.理由はいくつかあります.
  • プログラムメンテナンス中に、外部変数(例えば、データ型を変更する)を変更すると、同じファイル内の各関数がチェックされ、変更が関数にどのように影響するかが確認されます.
  • 外部変数にエラー値が適用された場合、エラーの関数を特定するのは難しい場合があります.大規模なパーティーでの殺人事件を処理する際、容疑者の範囲を縮小するのは難しいようだ.
  • は、外部変数に依存する関数を他のプログラムで多重化することは困難であり、外部変数に依存する関数は独立ではなく、別のプログラムでこの関数を使用するためには、前回の関数に必要な外部変数を持たなければならない.

  • 5.ブロック
    c言語は、宣言を含む適合文[ブロック]{ }を許可する
    cプログラムの構築
    これまで、cプログラムには次のものが含まれることを知っていました.
  • (includeやdefineのような前処理命令
  • )
  • タイプ定義
  • 外部変数宣言
  • 関数プロトタイプ
  • 関数定義
  • C言語は上記の項目の順序に対する要求は極めて少ないが、これらの規則を遵守するために、一般的にこのような方法でCプログラムを構築することを提案する.
  • #include指令
  • #define指令
  • タイプ定義
  • 外部変数宣言
  • main関数以外の関数のプロトタイプ
  • main関数定義
  • その他の関数定義