Вы получаете предупреждения, когда у вас есть определения структуры без объявления каких-либо переменных. Например, следующее выдаст предупреждение:
static struct s {
int a;
};
Это эквивалентно:
struct s {
int a;
};
Это определяет структуру s
, но не объявляет никаких переменных. То есть с ним не связано хранилище, поэтому нечего применять static
к.
Но если вы сделаете:
static struct s {
int a;
} x;
Тогда предупреждения нет, потому что вы объявление переменной x
в дополнение к определению структуры s
, поэтому static
применяется к x
.
Аналогично, если struct s
был ранее определен, вы можете сделать:
static struct s x;
без предупреждения. И, конечно, при желании вы можете при желании поставить инициализатор.