Ключевое слово, которое вы хотите: static
в локальном (не глобальном) контексте.
Важна контекстная вещь:
#include <stdio.h>
static int foo;
int main(int argc, char **argv){
//...
}
Здесь static
означает, что foo
имеет область видимости файла (т.е. не extern
).
В то время как в
char *strtok(char *str, char *sep){
static char *last;
//...
}
last
постоянно между вызовами на strtok
.
Все это говорит о том, что они редко используются, потому что они редко полезны и совершенно неприемлемы в многопоточном контексте (где они являются состоянием гонки, ожидающим своего наступления).