2012-02-07 80 views
5

有時候,我看到這樣的代碼:爲什麼comment參數的名稱,而不是離開它,因爲它是

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 

爲什麼評論參數的名稱,而不是離開它,因爲它是什麼?

+1

也許接管代碼的人知道參數名稱在函數聲明中不是強制性的,而編寫代碼的人不知道這個事實。它只是一個優先於另一個。 – 2012-02-07 11:20:49

回答

6

我看到這樣做的一個原因是,您明確地想要告訴其他程序員不要使用這些參數,但將它們留在註釋中以描述他們的意圖。我知道這沒有意義現在,但繼續閱讀。

我會用不同的例子:

class A 
{ 
public: 
    virtual void foo(int someProperty); 
}; 

class B : public A 
{ 
public: 
    virtual void foo(int /*someProperty*/); 
}; 

說你想要這個特定情況下,你想B::foo()做一些額外的東西,然後調用A::foo()與參數0。你必須保持相同的函數簽名,所以多態性的作品,但在B::foo(),你實際上沒有使用參數。你也不想在將來使用它。這基本上是一個意圖聲明,說「這種方法的邏輯不應該取決於某些房產」

B::foo(int/*someProperty*/) 
{ 
    //do some stuff 
    A::foo(0); 
} 

隨着註釋掉的參數名稱,你不能真正使用它(除非你到一些hacking)。但是評論的名字告訴你一些關於你傳遞給A::foo()的參數 - 它的'someProperty'從A

現在,我不同意語法,但這可能是一個可能的解釋。

0

如果被調用的函數(例如OnPaint)沒有使用參數,那麼編碼器可以在編譯時通過不提供參數名稱來避免關於未使用參數的警告消息。

0

某些編譯器在您評論參數時不會發出「未使用的參數警告」,或者不會首先提供該參數。但是,當然你需要讓這個類型擁有正確的簽名。

3

如果真的沒有需要的參數,你不需要給它們命名

如果沒有他們的名字,乍一看你可能不明白,爲什麼他們在那裏擺在首位。

如果你命名它們,一些編譯器會提醒你未使用的參數。

將名稱留爲評論是兩種方法之間的中間立場。

2

如果是這樣的onPaint()的定義開始,我已經看到註釋掉用來避免"unreferenced formal parameter"編譯器警告參數名稱(這些警告只會出現在較高的警告級別,微軟編譯器-W4水平)。

10

我認爲有些編譯器發佈了「未使用的參數」警告,當然這些參數沒有被使用。

尤其是在您所顯示的消息處理函數中,通常不需要參數來執行任務。因此,通過評論名稱名稱出來,你可以擺脫警告。另一方面,如果您稍後想要使用某些參數,則手頭的名稱很有用,因此註釋比刪除名稱更簡單。

+0

編譯器在設置爲/ w4時仍然會生成這些警告 – Stefan 2012-02-07 15:43:55

+0

好的,我不確定。似乎我總是在我最近的C++項目中使用了所有的參數:) – MartinStettner 2012-02-08 09:36:15

相關問題