2012-03-21 33 views
8

我遇到了別人寫的一段代碼。在頭文件中有幾個聲明爲靜態的全局函數。函數本身在單獨的實現文件中定義。 AFAIK,靜態函數定義在定義函數的轉換單元外不可見。如果是這樣,在頭文件中聲明靜態函數有什麼意義?在頭文件中聲明靜態全局函數

// 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 – 2012-03-21 11:08:04

回答

6

嗯,宣佈static功能僅他們中定義的源文件中可見,雖然在一個單獨的頭,宣佈他們是不是一個好主意。我也看到了一些開發者已經做到的情況。他們這樣做是爲了安排他們的順序,以便他們可以從另一個功能中調用一個功能。這是我的意思:

/* 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 */ } 

但恕我直言,這是一個非常災難性的方式來做到這一點。更好的解決方案是在實現它們之前僅將源文件中的static函數原型化。

+1

同意,這是一個可怕的方式來原型功能。那些編寫代碼的傢伙不再爲我們工作是件好事。 – pic11 2012-03-21 19:05:09