// scope.cpp, Maggie Johnson
// Description: A program to illustrate different scopes

#include <iostream>
using namespace std;

// The following 2 variables are global, that is, they
// are available inside any function in the program.
// If there is a local variable of the same name (either
// a or b) in a function, then the local variable overrides.
// the global.  It is typically not a good idea to use
// global variables, as they can be hard to track.
int a = 18;
int b = 6;

// This function assigns "a" and "b" to the incoming parameters.
// Notice that the local value of b in main is passed in as a,
// and the global value of a is passed in as b.
int function1(int a, int b) {
  return a - b;
}

// This function adds the two global variables, a and b together
// and assigns the sum to a local variable c.  This value is
// returned.  The c variable is no longer available once this
// function has completed its execution.
int function2() {
  int c;
  c = a + b;
  return c;
}

int main (void) {
  // We override the global value of b in this function with
  // this local variable,
  int b = 12;
  // We initialize a variable called c, which is different from
  // the one declared in function 2().
  int c = 0;
  // The global variable a is assigned 12 - 18 = -6 in the next
  // line.
  a = function1(b, a);
  // The local variable c is assigned the sum of the two global
  // variables.  Note that the previous line modified the global
  // variable a, which now equals -6.  Thus, c has the value of
  // -6 + 6 = 0.
  c = function2();
  // We print the value of the global variable a (-6), the local
  // value of b (12), and the local value of c (0).
  cout << "a: " << a << "  b: " << b << "  c: " << c << endl;
}