#include <stdio.h>
// globals (initialized to 0)
int a, b, c, d;
void g1(int b, int c) {
// free a,d refer to globals
printf("%d %d %d %d\n", a
, b
, c
, d
); }
void g2(int a_, int c_) {
// parameters renamed so we don’t shadow globals
g1(a_, c_);
}
int g3(int c_, int a_) {
int b_ = 3;
g1(a_, b_);
{ // inner block with its own c,d
int c = 8;
int d = 4;
g2(a_, b_);
}
g1(a_, b_);
return b_;
}
int main(void) {
int a = 4, b = 5; // locals shadow globals inside main
// first call: a=4 (local), b=5 (local), global c==0
a = g3(b, c);
// second call: b (local)==5, a (local)==3
g3(b, a);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBnbG9iYWxzIChpbml0aWFsaXplZCB0byAwKQppbnQgYSwgYiwgYywgZDsKCnZvaWQgZzEoaW50IGIsIGludCBjKSB7CiAgICAvLyBmcmVlIGEsZCByZWZlciB0byBnbG9iYWxzCiAgICBwcmludGYoIiVkICVkICVkICVkXG4iLCBhLCBiLCBjLCBkKTsKfQoKdm9pZCBnMihpbnQgYV8sIGludCBjXykgewogICAgLy8gcGFyYW1ldGVycyByZW5hbWVkIHNvIHdlIGRvbuKAmXQgc2hhZG93IGdsb2JhbHMKICAgIGcxKGFfLCBjXyk7Cn0KCmludCBnMyhpbnQgY18sIGludCBhXykgewogICAgaW50IGJfID0gMzsKICAgIGcxKGFfLCBiXyk7CgogICAgeyAgIC8vIGlubmVyIGJsb2NrIHdpdGggaXRzIG93biBjLGQKICAgICAgICBpbnQgYyA9IDg7CiAgICAgICAgaW50IGQgPSA0OwogICAgICAgIGcyKGFfLCBiXyk7CiAgICB9CgogICAgZzEoYV8sIGJfKTsKICAgIHJldHVybiBiXzsKfQoKaW50IG1haW4odm9pZCkgewogICAgaW50IGEgPSA0LCBiID0gNTsgICAvLyBsb2NhbHMgc2hhZG93IGdsb2JhbHMgaW5zaWRlIG1haW4KICAgIC8vIGZpcnN0IGNhbGw6IGE9NCAobG9jYWwpLCBiPTUgKGxvY2FsKSwgZ2xvYmFsIGM9PTAKICAgIGEgPSBnMyhiLCBjKTsKICAgIC8vIHNlY29uZCBjYWxsOiBiIChsb2NhbCk9PTUsIGEgKGxvY2FsKT09MwogICAgZzMoYiwgYSk7CiAgICByZXR1cm4gMDsKfQo=