Download Fundamentals of Programming: Variables, Scoping, Storage Classes, Inline Functions, Default Arguments and more Slides C programming in PDF only on Docsity! Fundamentals of Programming (FOP) 2 Attributes of a Variable • Variables have attributes which include; type, name, value, size int x = 4; We know 4 bytes are reserved for int and; – Scope • Where variable can be referenced in program – Storage class • How long variable exists in memory 5 Static Storage Classes • Static storage class – Variables exist for entire program • For functions, name exists for entire program – Not accessible outside one file, scope rules still apply • static keyword – Local variables – Keeps value between function calls – Only known in own function • extern keyword – Default for global variables/functions • Globals: defined outside of a function block – Known in any function that comes after it 6 1 // code 7 2 // A scoping example. 3 #include <iostream> 4 5 6 8 void useLocal( void ); // function prototype 9 void useStaticLocal( void ); // function prototype 10 void useGlobal( void ); // function prototype 11 12 int x = 1; // global variable 13 14 int main() 15 { 16 int x = 5; // local variable to main 17 18 cout << "local x in main's outer scope is " << x << endl; 19 20 { // start new scope 21 22 int x = 7; 23 24 cout << "local x in main's inner scope is " << x << endl; 25 26 } // end new scope Declared outside of function; global variable with file scope. Local variable Create a new block, giving x block scope. When the block ends, this x is destroyed. 7 27 28 cout << "local x in main's outer scope is " << x << endl; 29 30 useLocal(); // useLocal has local x 31 useStaticLocal(); // useStaticLocal has static local x 32 useGlobal(); // useGlobal uses global x 33 useLocal(); // useLocal reinitializes its local x 34 useStaticLocal(); // static local x retains its prior value 35 useGlobal(); // global x also retains its value 36 37 cout << "\nlocal x in main is " << x << endl; 38 39 return 0; // indicates successful termination 40 41 } // end main 42 10 72 // useGlobal modifies global variable x during each call 73 void useGlobal( void ) 74 { 75 cout << endl << "global x is " << x 76 << " on entering useGlobal" << endl; 77 x *= 10; 78 cout << "global x is " << x 79 << " on exiting useGlobal" << endl; 80 81 } // end function useGlobal local x in main's outer scope is 5 local x in main's inner scope is 7 local x in main's outer scope is 5 local x is 25 on entering useLocal local x is 26 on exiting useLocal local static x is 50 on entering useStaticLocal local static x is 51 on exiting useStaticLocal global x is 1 on entering useGlobal global x is 10 on exiting useGlobal This function does not declare any variables. It uses the global x declared in the beginning of the program. 11 local x is 25 on entering useLocal local x is 26 on exiting useLocal local static x is 51 on entering useStaticLocal local static x is 52 on exiting useStaticLocal global x is 10 on entering useGlobal global x is 100 on exiting useGlobal local x in main is 5 12 inline Functions • Inline functions – Keyword inline before function – Asks the compiler to copy code into program instead of making function call • Reduce function-call overhead • Compiler can ignore inline – Good for small, often-used functions • Example inline double cube( const double s ) { return s * s * s; } – const tells compiler that function does not modify s 15 Default Arguments • Function call with omitted parameters – If not enough parameters, rightmost go to their defaults – Default values • Can be global variables, constants, expressions or function calls • Set defaults in function prototype int myFunction( int x = 1, int y = 2, int z = 3 ); – myFunction(3) • x = 3, y and z get defaults (rightmost) – myFunction(3, 5) • x = 3, y = 5 and z gets default 16 1 // code 15 2 // Using default arguments. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 // function prototype that specifies default arguments 9 int boxVolume( int length = 1, int width = 1, int height = 1 ); 10 11 int main() 12 { 13 // no arguments--use default values for all dimensions 14 cout << "The default box volume is: " << boxVolume(); 15 16 // specify length; default width and height 17 cout << "\n\nThe volume of a box with length 10,\n" 18 << "width 1 and height 1 is: " << boxVolume( 10 ); 19 20 // specify length and width; default height 21 cout << "\n\nThe volume of a box with length 10,\n" 22 << "width 5 and height 1 is: " << boxVolume( 10, 5 ); 23 Set defaults in function prototype. Function calls with some parameters missing – the rightmost parameters get their defaults. 17 24 // specify all arguments 25 cout << "\n\nThe volume of a box with length 10,\n" 26 << "width 5 and height 2 is: " << boxVolume( 10, 5, 2 ) 27 << endl; 28 29 return 0; // indicates successful termination 30 31 } // end main 32 33 // function boxVolume calculates the volume of a box 34 int boxVolume( int length, int width, int height ) 35 { 36 return length * width * height; 37 38 } // end function boxVolume The default box volume is: 1 The volume of a box with length 10, width 1 and height 1 is: 10 The volume of a box with length 10, width 5 and height 1 is: 50 The volume of a box with length 10, width 5 and height 2 is: 100