#include <stdio.h>
// Global variables (all start at 0)
int a, b, c, d;
// g1 prints: a (global), b (param), c (param), d (global)
void g1(int b_param, int c_param) {
printf("%d %d %d %d\n", a
, b_param
, c_param
, d
); }
// g2 just forwards its args into g1
void g2(int a_param, int c_param) {
g1(a_param, c_param);
}
// g3 sets up its own locals, calls g1 twice and g2 once, then returns b_local
int g3(int c_param, int a_param) {
int b_local = 3;
// first call
g1(a_param, b_local);
// inner block with its own c_local and d_local
{
int c_local = 8;
int d_local = 4;
(void)c_local; // avoid “unused variable” warning
(void)d_local;
g2(a_param, b_local);
}
// third call
g1(a_param, b_local);
return b_local;
}
int main(void) {
int a_local = 4;
int b_local = 5;
// first g3: a_local becomes return of g3( b_local, c /*global*/ )
a_local = g3(b_local, c);
// second g3: return value is ignored
g3(b_local, a_local);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBHbG9iYWwgdmFyaWFibGVzIChhbGwgc3RhcnQgYXQgMCkKaW50IGEsIGIsIGMsIGQ7CgovLyBnMSBwcmludHM6ICBhIChnbG9iYWwpLCBiIChwYXJhbSksIGMgKHBhcmFtKSwgZCAoZ2xvYmFsKQp2b2lkIGcxKGludCBiX3BhcmFtLCBpbnQgY19wYXJhbSkgewogICAgcHJpbnRmKCIlZCAlZCAlZCAlZFxuIiwgYSwgYl9wYXJhbSwgY19wYXJhbSwgZCk7Cn0KCi8vIGcyIGp1c3QgZm9yd2FyZHMgaXRzIGFyZ3MgaW50byBnMQp2b2lkIGcyKGludCBhX3BhcmFtLCBpbnQgY19wYXJhbSkgewogICAgZzEoYV9wYXJhbSwgY19wYXJhbSk7Cn0KCi8vIGczIHNldHMgdXAgaXRzIG93biBsb2NhbHMsIGNhbGxzIGcxIHR3aWNlIGFuZCBnMiBvbmNlLCB0aGVuIHJldHVybnMgYl9sb2NhbAppbnQgZzMoaW50IGNfcGFyYW0sIGludCBhX3BhcmFtKSB7CiAgICBpbnQgYl9sb2NhbCA9IDM7CgogICAgLy8gZmlyc3QgY2FsbAogICAgZzEoYV9wYXJhbSwgYl9sb2NhbCk7CgogICAgLy8gaW5uZXIgYmxvY2sgd2l0aCBpdHMgb3duIGNfbG9jYWwgYW5kIGRfbG9jYWwKICAgIHsKICAgICAgICBpbnQgY19sb2NhbCA9IDg7CiAgICAgICAgaW50IGRfbG9jYWwgPSA0OwogICAgICAgICh2b2lkKWNfbG9jYWw7ICAgIC8vIGF2b2lkIOKAnHVudXNlZCB2YXJpYWJsZeKAnSB3YXJuaW5nCiAgICAgICAgKHZvaWQpZF9sb2NhbDsKICAgICAgICBnMihhX3BhcmFtLCBiX2xvY2FsKTsKICAgIH0KCiAgICAvLyB0aGlyZCBjYWxsCiAgICBnMShhX3BhcmFtLCBiX2xvY2FsKTsKCiAgICByZXR1cm4gYl9sb2NhbDsKfQoKaW50IG1haW4odm9pZCkgewogICAgaW50IGFfbG9jYWwgPSA0OwogICAgaW50IGJfbG9jYWwgPSA1OwoKICAgIC8vIGZpcnN0IGczOiBhX2xvY2FsIGJlY29tZXMgcmV0dXJuIG9mIGczKCBiX2xvY2FsLCBjIC8qZ2xvYmFsKi8gKQogICAgYV9sb2NhbCA9IGczKGJfbG9jYWwsIGMpOwoKICAgIC8vIHNlY29uZCBnMzogcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQKICAgIGczKGJfbG9jYWwsIGFfbG9jYWwpOwoKICAgIHJldHVybiAwOwp9