static
может сбивать с толку, поскольку в зависимости от контекста он имеет несколько разных значений.В этом контексте это означает, что определяемая переменная видна только в текущей единице перевода:
int i; // visible in all translation units
static int j; // visible only in the current translation unit