Scope and Storage Class

COS2614 - Programming: Contemporary Concepts · C++ Language Reference

Scope and Storage Class

In C++, the concepts of scope and storage class are essential for managing variables and their lifetimes. Understanding these concepts helps you control where a variable can be accessed and how long it exists in memory. This knowledge is crucial for writing efficient and error-free code.

Key idea: After this topic, you should be able to explain variable scope, identify different storage classes, and understand their implications in C++ programming.

Understanding Scope

Scope refers to the region of a program where a variable can be accessed. There are three main types of scope in C++:

1. Local Scope

A variable declared inside a function or a block has local scope. It can only be accessed within that function or block.

void example() { int x = 10; // x is local to example() cout << x; // This works } cout << x; // This will cause an error

2. Global Scope

A variable declared outside of all functions has global scope. It can be accessed from any function within the same file.

int x = 20; // Global variable void example() { cout << x; // This works } void anotherExample() { cout << x; // This also works }

3. Namespace Scope

Variables declared within a namespace have namespace scope. They can be accessed using the namespace name.

namespace MyNamespace { int x = 30; } void example() { cout << MyNamespace::x; // Accessing x from MyNamespace }

Storage Classes

Storage class determines the lifetime and visibility of a variable. C++ has several storage classes:

1. Automatic Storage Class

By default, local variables have automatic storage duration. They are created when the block is entered and destroyed when it is exited.

void example() { int x = 10; // x is automatic } // x is destroyed here

2. Static Storage Class

Static variables retain their value between function calls. They are initialized only once and exist for the lifetime of the program.

void example() { static int count = 0; count++; cout << count; // Prints the number of times example() has been called }

3. External Storage Class

External variables are declared outside of any function and can be accessed from any function in the same file. They have global storage duration.

int x = 50; void example() { cout << x; // Accessing external variable }

4. Register Storage Class

Register variables are stored in CPU registers instead of RAM for faster access. However, the number of register variables is limited.

void example() { register int count = 0; // count may be stored in a register }

Watch out: Remember that local variables are not accessible outside their block. Trying to access them will result in an error.

Summary

  • Scope defines where a variable can be accessed.
  • Local, global, and namespace scopes are the main types of scope.
  • Storage class determines the lifetime and visibility of a variable.
  • Automatic, static, external, and register are the main storage classes.

Check your understanding

  1. What is the difference between local and global scope?
  2. How does a static variable behave in a function?
  3. What is the purpose of the register storage class?
  4. Can a local variable be accessed outside its function? Why or why not?