CS253 Local Static
Here’s a program to generate unique student ID numbers:
unsigned long next_id() { unsigned long id=800000000UL; return ++id; } int main() { cout << next_id() << '\n'; cout << next_id() << '\n'; cout << next_id() << '\n'; }
800000001 800000001 800000001
That wasn’t very good.
Let’s move id
out of next_id()
:
unsigned long id=800000000UL; unsigned long next_id() { return ++id; } int main() { cout << next_id() << '\n'; cout << next_id() << '\n'; cout << next_id() << '\n'; }
800000001 800000002 800000003
That’s better, but now we have an evil global variable.
Let’s make id
static
:
static unsigned long id=800000000UL; unsigned long next_id() { return ++id; } int main() { cout << next_id() << '\n'; cout << next_id() << '\n'; cout << next_id() << '\n'; }
800000001 800000002 800000003
That’s better in that id
is only visible to this file,
but that’s still semi-global. Can we do better?
Move id
back to next_id()
, but leave it static
.
unsigned long next_id() { static unsigned long id=800000000UL; return ++id; } int main() { cout << next_id() << '\n'; cout << next_id() << '\n'; cout << next_id() << '\n'; }
800000001 800000002 800000003
Hooray! Now, id
is private and persistent.
A variable has two aspects, scope and lifetime.
static
changes both of these. It changes the scope of a global
variable to be only the current file. It also changes the lifetime
of the variable so that it is initialized only once, and persists until
the program ends.
A static
global is initialized at program start.
A static
local is initialized upon first use—when the function
is first called.
Modified: 2016-12-31T22:33 User: Guest Check: HTML CSSEdit History Source |
Apply to CSU |
Contact CSU |
Disclaimer |
Equal Opportunity Colorado State University, Fort Collins, CO 80523 USA © 2015 Colorado State University |