Programming in c++ Scope, Lifetime, and More on Functions Dale/eems/Headington
1 Scope, Lifetime, and More on Functions
Programming in C++ Chapter 8 Topics s Local Scope vS. Global Scope of an Identifier Detailed Scope Rules to Determine which Variables are Accessible in a block Determining the Lifetime of a Variable Initializations in Declarations s Interface Design %Writing a Value-Returning Function for a Task Some Value-Returning Functions with Prototypes in Header Files ectype and cmath Creating and Using a Module Structure Chart Stub Testing a Program
2 Chapter 8 Topics ❖Local Scope vs. Global Scope of an Identifier ❖Detailed Scope Rules to Determine which Variables are Accessible in a Block ❖Determining the Lifetime of a Variable ❖Initializations in Declarations ❖Interface Design ❖Writing a Value-Returning Function for a Task ❖Some Value-Returning Functions with Prototypes in Header Files cctype and cmath ❖Creating and Using a Module Structure Chart ❖Stub Testing a Program
Programming in C++ Scope of Identifier o the scope of an identifier (or named constant) means the region of program code where it is legal to use that identifier for any purpose
3 Scope of Identifier ❖the scope of an identifier (or named constant) means the region of program code where it is legal to use that identifier for any purpose
Programming in C++ Local Scope VS. Global cope o the scope of an ☆ the scope of ar identifier that is identifier that is declared inside a declared outside of block(this includes all namespaces, function parameters) functions and classes extends from the extends from point of point of declaration declaration to the end to the end of the of the entire file block containing program code
4 Local Scope vs. Global Scope ❖the scope of an identifier that is declared inside a block (this includes function parameters) extends from the point of declaration to the end of the block ❖the scope of an identifier that is declared outside of all namespaces, functions and classes extends from point of declaration to the end of the entire file containing program code
Programming in C++ const float TAX RATE =0.05; / global constant float tipRate ∥ global variable void handle( int, float ) ∥ function prototype using namespace std int main( int age //age and bill local to this block float bill i ma b, and tax cannot be used here //TAX RATE and tip Rate can be used handle(age, bill); return 0; void handle(int a, float b) float tax m/a b and tax local to this block l/ age and bill cannot be used here //TAX RATE and tip Rate can be used 5
5 const float TAX_RATE = 0.05 ; // global constant float tipRate ; // global variable void handle ( int, float ) ; // function prototype using namespace std ; int main ( ) { int age ; // age and bill local to this block float bill ; . // a, b, and tax cannot be used here . // TAX_RATE and tipRate can be used handle (age, bill) ; return 0 ; } void handle (int a, float b) { float tax ; // a, b, and tax local to this block . // age and bill cannot be used here . // TAX_RATE and tipRate can be used }
Programming in C++ Name Precedence (or Name Hiding) %when a function declares a local identifier with the same name as a global identifier, the local identifier takes precedence within that function
6 Name Precedence (or Name Hiding) ❖when a function declares a local identifier with the same name as a global identifier, the local identifier takes precedence within that function
Programming in C++ Detailed Scope Rules 1 Function name has global scope 2 Function parameter scope is identical to scope of a local variable declared in the outermost block of the function body 3 Global variable(or constant) scope extends from declaration to the end of the file, except as noted in rule 5 4 Local variable (or constant) scope extends from declaration to the end of the block where declared This scope includes any nested blocks, except as noted in rule 5 5 An identifier's scope does not include any nested block that contains a locally declared identifier with the same name (local identifiers have name precedence)
7 Detailed Scope Rules 1 Function name has global scope. 2 Function parameter scope is identical to scope of a local variable declared in the outermost block of the function body. 3 Global variable (or constant) scope extends from declaration to the end of the file, except as noted in rule 5. 4 Local variable (or constant) scope extends from declaration to the end of the block where declared. This scope includes any nested blocks, except as noted in rule 5. 5 An identifier’s scope does not include any nested block that contains a locally declared identifier with the same name (local identifiers have name precedence)
Programming in C++ Figure Scope Diagram for Scope Rules Program int a1 char a2. int main() void block1( int a1 char& b2) int c1 int d2, void block2() int a1 int b2. while(-) ∥/ Block3 C1 int b2
8 Figure Scope Diagram for Scope Rules Program int a1; char a2; int main ( ) { } void block1 ( { } } void block2 ( ) { int a1, char& b2 ) int c1; int d2; int a1; int b2; while (…) { //Block3 } int c1; int b2;
Programming in C++ Name Precedence Implemented by Compiler Determines Scope . When an expression refers to an identifier, the compiler first checks the local declarations s If the identifier isn't local, compiler works outward through each level of nesting until it finds an identifier with same name. There it stops o Any identifier with the same name declared at a level further out is never reached o If compiler reaches global declarations and still can't find the identifier, an error message results
9 Name Precedence Implemented by Compiler Determines Scope ❖ When an expression refers to an identifier, the compiler first checks the local declarations. ❖ If the identifier isn’t local, compiler works outward through each level of nesting until it finds an identifier with same name. There it stops. ❖ Any identifier with the same name declared at a level further out is never reached. ❖ If compiler reaches global declarations and still can’t find the identifier, an error message results
Programming in C++ Namespace Scope o the scope of an identifier declared in a namespace definition extends from the point of declaration to the end of the namespace body, and its scope includes the scope of a using directive specifying that namespace 10
10 Namespace Scope ❖the scope of an identifier declared in a namespace definition extends from the point of declaration to the end of the namespace body, and its scope includes the scope of a using directive specifying that namespace