2012-03-21 12 views
8

Başka biri tarafından yazılmış bir kod parçasıyla karşılaştım. Başlık dosyalarında statik olarak bildirilen birkaç global işlev vardır. Fonksiyonlar, ayrı uygulama dosyalarında tanımlanmıştır. AFAIK, statik fonksiyon tanımı, fonksiyonun tanımlandığı çeviri ünitesi dışında görünmez. Öyleyse, başlık dosyalarında statik işlevler bildirme noktası nedir?Başlık dosyalarında statik genel işlevleri bildirme

// in some header file 
static void foo(); 


// in some implementation file 
static void foo() 
{ 
.... 
.... 
} 
+0

http://stackoverflow.com/questions/92546/variable-declarations-in-header-files-static-or-not –

cevap

6

Eh, static ilan fonksiyonlar bunlar tanımlanmıştır kaynak dosyasında yalnızca görebilir. Ayrı başlıkta açıklanmadan iyi bir fikir olmasa da. Ben de, geliştiricilerin bunu yaptığı bazı durumlar gördüm. Bir sırayla düzenleyebilmeleri için bunu yaparlar, böylece bir işlevden diğerini çağırırlar.

/* In header */ 
static void plus(int); 
static void minus(int); 
static void multiply(int); 

/* In source file */ 
static void minus(int v) 
{ 
    /* So plus can be called in minus without having to define it 
    * before minus */ 
    plus(); 
} 

static void plus(int v) { /* code */ } 

Ama IMHO bunu yapmak için çok felaket bir yoludur: Ne demek bu. Daha iyi bir çözüm, bunları uygulamadan önce kaynak dosyadaki static işlevlerini prototiplemek içindir.

+1

Araya girme işlemine değer olup, prototip işlevlerinin yapılmasının korkunç bir yoludur. Bu kodu yazan adamın artık bizim için çalışmadığı iyi bir şey. – pic11

İlgili konular