Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global int i = 100, j = 5;
- void P(x) {
- int i = 10;
- print(x + 10);
- i = 200;
- j = 20;
- print (x);
- }
- main() {P(i + j);}
- first call: print(x+10) -> (i1 + j + 10) -> (100 + 5 + 10) -> 115
- second call: print(x) -> print(i1 + j) -> 105 (Already evaluated - call by need)
- print (i1 + j + 10) -> print (100 + 5 +10 ) -> 115
- print(x) -> print(i1 + j) -> (100 + 20) = 120 // Evaluate again - Call be name.
- global int i = 100, j = 5;
- void IncreaseTheGlobal() {
- i = i + 1; // static scoping means this is the GLOBAL i!
- print(i);
- }
- void P(x) {
- int i = 10;
- IncreaseTheGlobal(); // 101 (increased global i)
- print(i); // 10 (local i)
- print(x); // 106 (x is evaluated; picks up increased global i)
- IncreaseTheGlobal(); // 102 (2nd time increased global i)
- print(x); // 106 (x not re-evaluated; unaffected by 2nd increase)
- }
- main() {
- print(i); // 100 (original global i)
- P(i + j);
- print(i); // 102 (new global i)
- }
- #include <stdio.h>
- int i = 100, j = 5;
- #define print(num) printf("%dn", num)
- #define P(x) {
- int i = 10;
- print(x + 10);
- i = 200;
- j = 20;
- print(x);
- }
- main() {
- P(i + j);
- }
- int i = 10;
- print(i + j + 10); // 10 + 5 + 10 = 25
- i = 200;
- j = 20;
- print(i + j); // 200 + 20 = 220
- #define print(num) { int i = 0; printf("%dn", num); }
- int i = 10;
- print(x + 10); // print (i + j + 10); prints 10 + 5 + 10 = 25; local i gets used here
- i = 200;
- j = 20;
- print (x); // print (i + j); call by need ensures, no reevaluation and i + j is 15.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement