Source of storage_linkage_main3.cpp


  1: //storage_linkage_main3.cpp
  2: //Goes with storage_linkage_aux3.cpp. Compile the two files
  3: //separately and link the object files to produce an executable.
  4: //Illustrates the use of the keyword "static" applied to a function
  5: //defined in the global namespace to restrict the visibility of
  6: //that function to the file in which it is defined.

  8: #include <iostream>
  9: using namespace std;

 11: void SayHi();
 12: void DisplayGreeting();

 14: int main()
 15: {
 16:     SayHi();
 17:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 19:     DisplayGreeting();
 20:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 21: }

 23: void SayHi()
 24: {
 25:     cout << "\nHi from the main file!";
 26: }

 28: /*
 29: Questions:
 30: 1. What is the effect of commenting out the above definition of SayHi()?
 31: 2. What is the effect of commenting out the above definition of SayHi()
 32:    and simultaneously commenting out the keyword static in the companion
 33:    file storage_linkage_aux3.cpp?

 35: Answers:
 36: 1. There will be a lilnk-time error since a SayHi() function definition
 37:    can no longer be found. (The visibility of the one in the companion
 38:    file is limited to that file.)
 39: 2. In this case, the SayHi() function defined in the companion file is
 40:    used twice. It is the one called directly in main in this file, and
 41:    is also the one called indirectly (by DisplayGreeting() from the
 42:    companion file). Thus the program compiles and links fine, and we get,
 43:    twice, "Hi from the auxiliiary file!"
 44: */