まぬねこの足跡。。。

備忘録+たのしさ+ひっそりと

C言語 変数の寿命 スコープ

スコープ

変数の寿命と有効範囲を指定する。

ローカル変数

※基本、「{}」ブロック内のみ有効

#include <stdio.h>

void ecoho(void); 

int main(void){ ←ecoho関数内の変数Fの存在がわからない。
 ecoho();
 ecoho();
    return 0;
}

void ecoho(void){
    int F=0; ←ローカル変数:関数内のみの存在
    F++;
    printf("%d回目\n",F);
}

表示イメージ

1回目
1回目

グローバル変数

プログラム開始時に0自動初期化

#include <stdio.h>

int counta; ←グローバル変数:記述したソースファイル内全体で存在。
void ecoho(void); 

int main(void){ ←ecoho関数内の変数Fの存在がわからない。
 ecoho();
 ecoho();
    return 0;
}

void ecoho(void){
    int F=0; ←ローカル変数:関数内のみの存在
    F++;
 counta++;
    printf("ローカル%d回目\n",F);
    printf("グローバル%d回目\n",counta);
}

表示イメージ

ローカル1回目
グローバル1回目
ローカル1回目
グローバル2回目

グローバル変数とローカル変数 優先順位

ローカル変数の方が優先される

スタティック変数

  • プログラム開始時、1回だけ0で自動初期化
  • 宣言したブロック()関数)内のみ存在するが、プログラムが終了するまで値を保持。
#include <stdio.h>

int counta; ←グローバル変数:記述したソースファイル内全体で存在。
void ecoho(void); 

int main(void){ ←ecoho関数内の変数Fの存在がわからない。
 ecoho();
 ecoho();
    return 0;
}

void ecoho(void){
 static int cnt;  ←スタティック変数:
    int F=0; ←ローカル変数:関数内のみの存在
    F++;
 counta++;
    printf("ローカル%d回目\n",F);
    printf("グローバル%d回目\n",counta);
}