[英]What naming conventions do you follow with functions that allocate memory?
所以這里有兩個功能幾乎做同樣的事情。
如果您必須將兩者都包含在您的項目中,您會如何命名每一個?
void strToLower1(char* str)
{
int len = strlen(str);
int i;
for (i=0; i<len; i++)
str[i] = tolower(str[i]);
}
char* strToLower2(const char* inputStr)
{
char* str = strdup(inputStr);
strToLower1(str);
return str; // must be freed
}
編輯:我修改了上面的代碼正確性示例(sheesh)
我真的很喜歡Taligent 編碼標准,尤其是命名約定。 關於使用特殊名稱進行復制、創建和采用例程的約定可能適用於此處:
https://root.cern.ch/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/books/WM/WM_67.html#0
使用特殊名稱復制、創建和采用例程
分配、管理或負責存儲的例程具有特殊名稱並遵守以下准則:
創建調用者必須刪除的新對象的例程以 Create... 開頭
復制現有對象的例程,其中調用者必須刪除副本,以 Copy 開頭... 復制對象的成員函數應該是 Copy()。
放棄對象並將刪除責任傳遞給調用者的例程以 Orphan 開頭...
接受調用者分配的對象並負責最終刪除它的例程以采用...開始(這種編程風格容易出錯;如果可能,避免它。)
采用不能遵循先前規則的例程(例如構造函數),參數名稱以采用開頭...
[內容] [上一頁] [下一頁] 單擊圖標將有關此材料的問題或更正發送給 Taligent 人員。 版權所有©1995 Taligent, Inc. 版權所有。
在此之后,第一個方法可以稱為createLowerCaseStr()
或copyAsLowercaseStr()
。 前導關鍵字create
和copy
表示必須由調用者管理的新內存。
就個人而言,我會調用第二個函數transformIntoLowercase()
或mutateIntoLowercase()
,但我傾向於使用冗長的名稱。 雖然 Taligent 未指定,但我將主要關鍵字transform
和mutate
視為就地完成轉換的提示。
如果strToLowerInPlace
返回 'str' 那么你可以簡單地寫new_s = strToLowerInPlace(strdup(s))
。 因此,我會放棄“InPlace”並假設一切都已就位,並且調用者可以根據需要進行復制。
(如果你將有兩個功能,至少使復制一個呼叫就地一個!)
第一個: char *copylo(char *dst, const char *src);
(沒有分配!)
第二個: char *lowerize(char *data);
tolower()
的函數不需要做瘋狂的測試和硬編碼轉換
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.