#include <stdio.h>

int x; // グローバル変数（初期値は自動的に0）

void mondai1(int b) {
    x = b;
}

void mondai2(void) {
    static int c = 10;
    x = c;
    c++;
}

int mondai3(int d) {
    x++;
    d++;
    return d;
}

int main(void) {
    printf("x = %d [GS:初期値がないから0]\n", x);
    
    x = 101;
    printf("x = %d [GS:直前で101を代入したから101]\n", x);
    
    mondai1(102);
    printf("x = %d [GS:mondai1(102)内でグローバル変数xに102が代入されたから102]\n", x);
    
    mondai2();
    mondai2();
    mondai2();
    printf("x = %d [GS:mondai2が3回実行され static変数cの12が代入されたから12]\n", x);
    
    for (int i = 103; i < 104; i++) {
        int x = i; // ローカル変数x（グローバル変数xをシャドーイング）
        printf("x = %d [LA:ローカル変数xにi(103)を代入したから103]\n", x);
        
        x = mondai3(i); 
        printf("x = %d [LA:mondai3(103)の戻り値104がローカル変数xに代入されたから104]\n", x);
    }
    
    printf("x = %d [GS:for文を抜けグローバル変数xを参照。mondai3内でインクリメントされたため13]\n", x);
    
    return 0;
}