CS253: Software Development with C++

Spring 2018

Variable Scope

See this page as a slide show

CS253 Variable Scope

Variable Scope

Global variables

int alpha = 42;  // global scope, static duration

int main() {
    cout << ++alpha << '\n';
}
43

Example of evil

int i;  // ☠☠☠

void foo() {
    for (i=0; i<5; i++) {
        cout << "In foo, i=" << i << '\n';
    }
}

int main() {
    for (i=0; i<3; i++) {
        cout << "In main, i=" << i << '\n';
        foo();
    }
}
In main, i=0
In foo, i=0
In foo, i=1
In foo, i=2
In foo, i=3
In foo, i=4

Global constants

constexpr int days_in_week = 7;
const auto starting_time = time(nullptr);

int main() {
    cout << "Days/year ≅ " << 52*days_in_week << '\n'
         << "Secs: " << starting_time << '\n';
    return 0;
}
Days/year ≅ 364
Secs: 1732268054

Global constants are fine.

Somewhat constant globals

string program_name;

void die_screaming() {
    cerr << program_name << ": fatal error!\n";
    exit(1);
}

int main(int, char *argv[]) {
    program_name = argv[0];
    die_screaming();
}
./a.out: fatal error!

Function scope

int main() {
    double pi = 355.0/113;
    cout << pi << '\n';
    return 0;
}
3.14159

Local scope

int main() {
    double pi = 355.0/113;
    cout << pi << '\n';
    if (pi < 5) {
        auto tau = pi*2;
        cout << tau << '\n';
    }
    return 0;
}
3.14159
6.28319

Shadowing

Shadowing: an inner scope symbol shares a name with an outer scope symbol.

string s = "Larry";
int main() {
    cout << "1: " << s << '\n';
    string s = "Moe";
    cout << "2: " << s << '\n';
    if (!s.empty()) {
        string s = "Curly";
        cout << "3: " << s << '\n';
    }
    cout << "4: " << s << '\n';
    return 0;
}
1: Larry
2: Moe
3: Curly
4: Moe

User: Guest

Check: HTML CSS
Edit History Source

Modified: 2018-04-24T16:57

Apply to CSU | Contact CSU | Disclaimer | Equal Opportunity
Colorado State University, Fort Collins, CO 80523 USA
© 2018 Colorado State University
CS Building