2012-10-31 12 views

Odpowiedz

28

Statyczna ogranicza zakres zmiennej do tego samego translation unit.
statyczna zmienna globalna ma wewnętrzne powiązania.
niestatyczny globalny zmienna ma zewnętrzne powiązania.

dobre Przeczytaj:
What is external linkage and internal linkage?

+0

Jeśli niestatyczny globalny ma zewnętrzne powiązanie, jaki jest pożytek z 'extern'? – rubenvb

+0

@rubenvb: Odpowiedź na pytanie Q została szczegółowo wyjaśniona w linku w linii do odpowiedzi. –

+2

@rubenvb 'extern' oznacza, że ​​jest to deklaracja, a nie definicja, jak prototyp funkcji. –

7

Globalna static zmienna jest dostępna tylko w jednostce tłumaczeń (czyli pliku źródłowego) zmienna jest w zmiennej non-static globalne można odwoływać się od innych. pliki źródłowe.

+3

Dokładniej: użycie 'static' zapobiega linkowaniu eksportera symbolu z tej jednostki tłumaczeniowej. – cdhowie

1

Globalny Non zmienne statyczne są accessable z innymi plikami, natomiast statyczne zmienne globalne nie

+1

Oczywiście są one "dostępne" poprzez wskaźniki. Po prostu "nie mogą być przywoływane przez nazwy z zakresu innych jednostek tłumaczeniowych" (§3.5). – dyp

+1

@DyP Myślę, że to oczywiste, że Rahul miał na myśli, że zmienna nie jest dostępna po nazwie. – Pavel

3

są, jeśli nie wiem, jaka jest różnica, poprawna odpowiedź będzie prawdopodobnie jeszcze bardziej mylące dla Ciebie. W skrócie, static s klasy nie są statyczne w zakresie plików. Statyka klasy jest zasadniczo identyczna ze zwykłymi zmiennymi, ale trzeba będzie się do nich odwołać, dodając przedrostek ich nazwą klasy. Statyka w zakresie pliku to zwykłe zmienne, które są lokalne tylko dla pliku. Aby zrozumieć, co to oznacza, spróbuj dodać dwie zmienne o tej samej nazwie do jednego projektu. Otrzymasz błędy linkera, ponieważ istnieje wiele identycznych symboli. Tworząc symbole statyczne, unikniesz problemów, a nazwa zmiennej nie będzie dostępna spoza pliku.

Powiązane problemy