2015-05-14 30 views
1

據我瞭解,在函數聲明中不需要給變量名稱,但仍然推薦使用。建議在函數聲明中給變量名嗎?

例如:setcur()函數接受兩個參數:

void setcur(int, int); 

void setcur(int row, int col); 

爲什麼建議在函數聲明給變量名:行號和 和列number.Hence可以如下聲明?

+4

也許對於自述文檔 - 由於參數名稱,評論將不是必需的。 – anishsane

+0

它是文檔。 'void setcur(int,int);'不會告訴那些整數應該是什麼。 – Blorgbeard

+0

沒有很好的理由不這樣做。它有助於該功能簽名有意義而無需解釋它的評論。 – 121c

回答

3

這實際上是更可讀性的緣故。你只需要在函數聲明中使用變量類型;然而,對於閱讀你的代碼的人來說,理解這些輸入的實際內容是非常好的,假設你的名字是合適的。

如果你正在處理一個大文件,並且你不記得你的.h文件中的函數作爲輸入,它會使你的生活變得更容易。

1

添加一個體面的變量名稱可以提高可讀性並幫助記錄您的功能。考慮例如

void area(int, int); // which parameter comes first? area of what? 

VS

void area(int radius, int height); // now it's clear that it is a cylinder, order is also clear 

你也可以使用例如doxygen自動生成文檔,在這種情況下,您通常會記錄頭文件。在這種情況下,命名函數參數是有意義的,因此它們與doxygen的名稱相對應\param s。

1

有一直在這裏顯著的討論,如果你真的很好奇:

Why do function prototypes include parameter names when they're not required?

簡短的回答是可讀性,但使用你的例子,基本上

void setcur(int,int); 

可以實現爲

(1) void setcur(int row,int col); 

(2) void setcur(int col,int row); 
(any other implementations are possible, but allow 2 as an example). 

通過標題中的變量名稱,您可以輕鬆地瞭解要傳遞給行和列的內容。否則,您需要深入與代碼頭分開存在的代碼文件。想象一下,如果你所有的是

void setcur(int, int) 

並假設(1),但它確實是(2)。你將很難在代碼中調試失敗。

0

雖然這些名稱在技術上沒有要求,但它們可以作爲文檔來幫助用戶。此外,他們幫助你的IDE展現更好的簽名,完井等

在一些工具感知的形式添加文檔可能看起來像一個選擇,但你的代碼也可能具有不同的集成開發環境中使用,而且與評論,聲明中的變量名稱是,這是在函數聲明中提供更多語義信息的唯一標準化方式

另請注意,如果使用庫,庫的用戶可能甚至看不到該函數的定義,他所擁有的僅僅是帶有聲明的頭文件和要鏈接的二進制庫。