簡體   English   中英

對於分配內存的函數,您遵循哪些命名約定?

[英]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() 前導關鍵字createcopy表示必須由調用者管理的新內存。

就個人而言,我會調用第二個函數transformIntoLowercase()mutateIntoLowercase() ,但我傾向於使用冗長的名稱。 雖然 Taligent 未指定,但我將主要關鍵字transformmutate視為就地完成轉換的提示。

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM