The static keyword can be used to create variables that are visible to only one function. However, unlike local variables that get created and destroyed every time a function is called, static variables persist beyond the function call, preserving their data between function calls.

Variables declared as static will only be created and initialized the first time a function is called.


This is only one use of the static keyword in C++. It has some other important uses that are not documented here; consult a reliable C++ reference for details.


One use case for static variables is implementing counters that last longer than the functions which need them, but shouldn’t be shared to other functions. Here’s an example:

void setup() {

void loop() {
    int reading;
    if (timeToReadSensors()) {
        reading = readSensors();
    // do something with reading

int readSensors() {
    static int numSensorReadings = 0;
    if (numSensorReadings % 100 == 0) {
        SerialUSB.print("just got to another 100 sensor readings");
    return analogRead(...);

In this example, the static variable numSensorReadings is initialized to zero the first time readSensors() is called, and then incremented, so it starts out at one. Subsequent calls to readSensors() won’t reset numSensorReadings to zero, because it was declared static. Thus, numSensorReadings is a count of the number of times that readSensors() has been called.

License and Attribution

Portions of this page were adapted from the Arduino Reference Documentation, which is released under a Creative Commons Attribution-ShareAlike 3.0 License.