2012-10-31 28 views

cevap

28

Statik, değişkenin kapsamını aynı translation unit ile sınırlar.
A static global değişken dahili bağlantısı vardır.
A statik olmayan bir global değişken dış bağlantısı'a sahiptir.

İyi Okuma:.
What is external linkage and internal linkage?

+0

Statik olmayan bir global dış bağlantıya sahipse, 'extern'in kullanımı nedir? – rubenvb

+0

@rubenvb: Q cevabınızın cevabı, cevaplanacak satır içi bağlantıda ayrıntılı olarak açıklanmıştır. –

+2

@rubenvb 'extern', bir işlev için prototip gibi bir tanım ve bir tanım olmadığı anlamına gelir. –

7

küresel bir static değişken çeviri biriminin (yani kaynak dosyası) değişken olduğu bir statik olmayan genel değişken diğerinden başvurulabilir sadece mevcuttur kaynak dosyaları. Eğer farkın ne bilmiyorsanız statik global değişkenler değil

+3

Daha spesifik olarak: 'static' kullanmak, linker’in sembolün bu çeviri biriminden dışa aktarılmasını engeller. – cdhowie

1

Küresel Olmayan statik değişkenler diğer dosyaları erişilebilir durumda olduklarından, doğru cevap muhtemelen daha da kafa karıştırıcı size olacaktır. Kısaca, bir sınıfın static s'si dosya kapsamındaki statistiklere uymuyor. Bir sınıfın statiği, normal değişkenlere göre özdeştir, ancak bunları sınıf adıyla ön ekleyerek başvurmaları gerekir. Dosya kapsamındaki statikler, yalnızca dosyaya yerel olan değişkenlerdir. Bunun ne anlama geldiğini anlamak için, aynı ada sahip iki değişkeni tek bir projeye eklemeyi deneyin. Birden fazla aynı sembol olduğu için bağlayıcı hataları alırsınız. Sembolleri statik yaparak, bu problemlerden kaçınacaksınız ve değişkenin ismi dosyanın dışından erişilebilir olmayacaktır.

+1

Elbette, işaretçiler aracılığıyla "erişilebilir". Onlar sadece "diğer çeviri birimlerinin kapsamlarından isimlerle ifade edilemezler" (§3.5). – dyp

+1

@DyP Ben Rahul'ın bu değişkenin adıyla erişilemediği anlamına geldiğini düşünüyorum. – Pavel

İlgili konular