9_inner_fun.cvc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * Different shadowing concepts illustrated
  3. */
  4. extern void printInt( int val);
  5. extern void printFloat( float val);
  6. extern int scanInt( );
  7. extern float scanFloat( );
  8. extern void printSpaces( int num);
  9. extern void printNewlines( int num);
  10. export int main()
  11. {
  12. // this variable is going will be escaping below
  13. int a = scanInt();
  14. // The bir variable is an example of a local (ie non-escaped) variable
  15. int bir = a;
  16. /* A variable shadowed by an argument */
  17. void bar (int a)
  18. {
  19. a = 11111;
  20. printInt(a);
  21. printNewlines(1);
  22. }
  23. /* A variable initalized by a variable of the same name */
  24. void boz ()
  25. {
  26. int a = a;
  27. a = a + 11111;
  28. printInt(a);
  29. printNewlines(1);
  30. }
  31. /* using a in the inner function makes it an escaped variable */
  32. void biz ()
  33. {
  34. a = 55555;
  35. }
  36. bar(a);
  37. printNewlines(1);
  38. printInt(a);
  39. printNewlines(2);
  40. baz(a);
  41. printNewlines(1);
  42. printInt(a);
  43. printNewlines(2);
  44. bor(a);
  45. printNewlines(1);
  46. printInt(a);
  47. printNewlines(2);
  48. boz();
  49. printNewlines(1);
  50. printInt(a);
  51. printNewlines(2);
  52. printInt(bir);
  53. printNewlines(2);
  54. biz();
  55. printInt(a);
  56. printNewlines(2);
  57. printInt(bir);
  58. printNewlines(2);
  59. return 0;
  60. }
  61. /* An argument shadowed by a variable */
  62. void baz(int b){
  63. // The variable b cannot be defined in the same scope hence it is in an inner function
  64. void baz_inner(){
  65. int b = 22222;
  66. printInt(b);
  67. }
  68. baz_inner();
  69. }
  70. /* An argument shadowed by a variable */
  71. void bor(int b){
  72. // The function b cannot be defined in the same scope hence it is in an inner function
  73. void baz_inner(){
  74. void b() {
  75. printInt(33333);
  76. }
  77. b();
  78. }
  79. baz_inner();
  80. }
  81. /* This function is going to be shadowed by a variable in main */
  82. void bir(){
  83. printInt(3333);
  84. }