2012-07-04 114 views
1

我已經看到了這對我擺弄的程序:靜態常量無效*方法(c)中

static const void *method() 
{ 
// other code 
return anotherMethod(param1,param2); 
} 

對於我個人理解,這將返回一個指針的函數。現在,基於this,我想弄清楚它是什麼static const void應用於:

int f(void); 
int *fip(); //Function returning int pointer 
int (*pfi)(); //Pointer to function returning int 

那麼什麼是添加static const(假設這是適用於看重指定函數的返回的真正優勢)。另外,函數的返回指針是否會被調用?或者它只是一個指向它的指針?因爲從代碼我有以下內容:

void start() 
{ 
    method(); 
} 

我假設它將被調用,否則它將被分配給一個指針。

+1

只是一個註釋:我相信你會混淆C和C++。在C++中,'start()'表示'start(void)',前者是鼓勵風格。但是在C語言中,'start()'意思是「函數接受各種垃圾參數,希望產生微妙的錯誤」。在C中,你應該總是寫'start(void)'。沒有參數的函數被標記爲C標準中的過時特徵,並且可能在將來從語言中刪除(參見C11 6.11.6)。 – Lundin

+0

我實際上在一個objective-c上下文中使用,並且該方法的名稱完全是任意的。但是,謝謝你的注意.. – Peres

回答

10

不,該函數將返回const void*static限制函數對文件作用域的可見性。

+0

好吧,所以如果我不關心返回,是否有一個很好的理由來實際返回一個'const void *'?這是一個好習慣嗎? – Peres

+3

它通知調用者返回的值不會被修改,所以是的,它是有用的。然而,「常量」可以放棄,但至少意圖是明確的,並且調用者必須故意拋棄它,而不是意外地修改它。 – hmjd

1

函數之前的靜態關鍵字並不意味着它會返回一個靜態變量。它只是意味着該功能是「靜態」的。這意味着此功能無法從「外部」對象訪問,如從另一個源文件編譯的對象文件。

你給的例子,將返回

const void* 

,並會拒絕鏈接到該功能的任何外部引用。

0
static const void *method() 

它返回一個「const void *」。這可能是一個函數指針投入void *,但通常情況下不應該如此。

void start() 
{ 
    method(); 
} 

在這裏,調用者根本對結果不感興趣。沒有任何魔法發生。

3

static表示該函數對於編譯單元(源文件)是私有的,並且在其外部不可見。

const void *表示返回值是指向常量內存的指針,即不應寫入的內存。