我遇到了別人寫的一段代碼。在頭文件中有幾個聲明爲靜態的全局函數。函數本身在單獨的實現文件中定義。 AFAIK,靜態函數定義在定義函數的轉換單元外不可見。如果是這樣,在頭文件中聲明靜態函數有什麼意義?在頭文件中聲明靜態全局函數
// in some header file
static void foo();
// in some implementation file
static void foo()
{
....
....
}
我遇到了別人寫的一段代碼。在頭文件中有幾個聲明爲靜態的全局函數。函數本身在單獨的實現文件中定義。 AFAIK,靜態函數定義在定義函數的轉換單元外不可見。如果是這樣,在頭文件中聲明靜態函數有什麼意義?在頭文件中聲明靜態全局函數
// in some header file
static void foo();
// in some implementation file
static void foo()
{
....
....
}
嗯,宣佈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
函數原型化。
同意,這是一個可怕的方式來原型功能。那些編寫代碼的傢伙不再爲我們工作是件好事。 – pic11 2012-03-21 19:05:09
這是值得研究:http://stackoverflow.com/questions/92546/variable-declarations-in-header-files-static-or-not – 2012-03-21 11:08:04