Poprzedzanie definicji struktury/typu słowem kluczowym static

0

Hej
Czy w C w jednostce translacji (pliku .c) ma sens poprzedzanie definicji struktury słowem kluczowym static?
Piszę kernel moduł i kolega coś takiego zrobił w kodzie i nie wiem czy to ma sens:

static struct priv_map {
    const char *name;
    int type;
};

Moim zdaniem jak już deklarujesz konkretną zmienną to wtedy dajesz static jak chcesz by była jako internal linkage:

static struct priv_map zmianna;

a przy definicji struktury/typu po co dawać słowo static? Ma to sens?

1

Jeśli nie chcesz by ten symbol był widoczny w innych translation units to ma to sens.
W ten sposób zapobiegniesz konfliktowi symbolów.

Z drugiej strony jak mówimy o zmiennej, to już to śmierdzi zmienną globalną (ukrytym stanem) i wszystkimi jej konsekwencjami.

1

Ciekawe efekty pojawiają się jeżeli structurę zadeklarowaną jako static przeniesiesz do pliku "*.h" i spróbujesz dołaczyć do kilku modułów "*.cpp".
Kiedyś parę godzin straciłem aby zajarzyć o co biega.

0

Przeszedłem własnie do kompilacji mojego dzieła i jak mam ten static o którym mowa wyżej to mam warning:

 warning: useless storage class specifier in empty declaration
};

Na stack overflowu piszą (co prawda do enuma, ktośtam staticiem poprzedził):

static only applies to variables and functions so, as the compiler says, it is useless in the context in which you have it.
What do you want the static to do? It serves there to give variables defined in the declaration internal linkage.
nce you don't define a variable there in your code, it is useless in fact (if not illegal).

To może rzeczywiście to się daje tak jak na początku myślałem tylko jak zmienną deklarujesz czy funkcje a do samej definicji struktury, klasy, enuma nie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1