wspólne zmienne globalne w C


82

Jak mogę tworzyć zmienne globalne, które są współdzielone w C? Jeśli umieszczę go w pliku nagłówkowym, wówczas konsolidator narzeka, że ​​zmienne są już zdefiniowane. Czy to jedyny sposób, aby zadeklarować zmienną w jednym z moich plików C i ręcznie wstawić externs na początku wszystkich innych plików C, które chcą jej użyć? To nie brzmi idealnie.


Udostępnione we własnym kodzie źródłowym? Umieść deklarację extern w jednym pliku nagłówkowym, a definicję w innym (pojedynczym) źródle. Są one oczywiście dzielone między wątkami procesu. Do wymiany danych między procesami należy używać mechanizmów IPC (pamięć współdzielona, ​​potoki).
Hernán



Odpowiedzi:


64

W pliku nagłówkowym zapisz go z extern. W globalnym zakresie jednego z plików c zadeklaruj go bez extern.


1
Czy możemy zamiast tego zadeklarować to w pliku nagłówkowym tego pliku * .c?
Geremia

91

W jednym pliku nagłówkowym (shared.h):

W każdym pliku, którego chcesz użyć tego globalnego symbolu, umieść nagłówek zawierający deklarację extern:

Aby uniknąć wielu definicji konsolidatora, tylko jedna deklaracja symbolu globalnego musi być obecna w jednostkach kompilacji (np .: shared.cpp):


czy masz jakieś preferowane referencje, aby dowiedzieć się więcej o mechanizmach IPC?
NickO,

7
Proszę położyć większy nacisk na „tylko jedną deklarację waszego globalnego symbolu…” Trochę się potknęłam o ten jeden. Miałem deklarację dotyczącą wszystkich plików c, na których chciałem użyć zmiennych globalnych :(
AntonioCS

22

W pliku nagłówkowym

plik nagłówkowy

W pliku z plikiem, który chcesz umieścić globalnie:

W innych plikach, które wymagają wersji zewnętrznej:


ah to jest rozwiązanie, które miałem jakiś czas temu - zapomniałem o zmiennej preprocesora MAIN_FILE. Myślę, że podoba mi się, że kurs zaakceptował odpowiedź bardziej niż
Claudiu

15

Deklarację umieszczasz w pliku nagłówkowym np

W jednym ze swoich plików .c definiujesz go w zakresie globalnym.

Każdy plik .c, do którego chce uzyskać dostęp, my_globalzawiera plik nagłówkowy z rozszerzeniem externin.


5

Jeśli udostępniasz kod między C i C ++, pamiętaj, aby dodać do shared.hpliku:


2

Jest bardziej przejrzysty sposób z tylko jednym plikiem nagłówkowym, więc jest łatwiejszy w utrzymaniu. W nagłówku ze zmiennymi globalnymi poprzedzaj każdą deklarację słowem kluczowym (używam wspólnego), a następnie w jednym pliku źródłowym umieść to w ten sposób

i wszelkie inne pliki źródłowe, takie jak ten

Po prostu upewnij się, że nie zainicjowałeś żadnej ze zmiennych w pliku globals.h, w przeciwnym razie konsolidator nadal będzie narzekał, ponieważ zainicjowana zmienna nie jest traktowana jako zewnętrzna, nawet przy użyciu słowa kluczowego extern. Plik global.h wygląda podobnie do tego

wydaje się działać dla każdego typu deklaracji. Oczywiście nie używaj wspólnego słowa kluczowego na #define.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.