#include <stdio.h>
 
int x;
 
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: 23行目で101を代入したため]\n", x);
 
    mondai1(102);
    printf("x = %d [GS:mondai1(102)内で102を代入したため]\n", x);
 
    mondai2();
    mondai2();
    mondai2();
    printf("x = %d [GS: 静的変数c(初期値10)がmondai2の3回呼び出しで+1ずつ増え12が代入されたため]\n", x);
 
    for (int i = 103; i < 104; i++) {
        int x = i;
        printf("x = %d [LA: 同名のローカル変数x(値103)がグローバル変数を覆い隠すため]\n", x);
        x = mondai3(i);
        printf("x = %d [LA: mondai3(103)の戻り値104がローカル変数xに代入されたため]\n", x);
    }
 
    printf("x = %d [GS: forブロックを抜けグローバル変数x(mondai3内で+1された13)を参照するため]\n", x);
    return 0;
}
 