2010-11-18 67 views
2

所以這裏有兩個功能幾乎完成同樣的事情。你對分配內存的函數有什麼命名約定?

如果您必須將兩者都包含在您的項目中,您會如何命名每一個?

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 
} 

編輯:我修改了上面的例子中的代碼正確性(嘖)

+2

愛人們如何評論有關tolower()函數的事實。是的我知道。用這個函數作爲例子的目的是爲了簡化問題。有趣的是,這些委員會的人們喜歡回答沒有提出的問題。 – theanine 2010-11-18 23:48:08

+0

@ComtriS同樣有趣的是,董事會中的「人員」寧願沉溺於他們的無知,而不願意糾正他們沒有「要求」的事情。 – 2010-11-19 14:43:39

+0

@San Jacinto它與無知毫無關係。我需要輸入一個例子。我寫的代碼顯然可以修改以改進。這個例子的重點是人們可以理解我的問題。 – theanine 2010-11-20 04:10:20

回答

2

我真的很喜歡Taligent Coding Standards,尤其是naming conventions。公約關於using special names for copy, create, and adopt routines可申請在這裏:

http://pcroot.cern.ch/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/books/WM/WM_67.html#0

使用特殊的名字複製,創建, 並採用程序

例程是分配,管理,或 承擔存儲有責任 特殊名稱並遵守 以下準則:

該例程使 一個新的對象,調用者必須 刪除與創建開始...

例程是複製現有對象, 是主叫必須刪除副本, 開始複製...的成員函數 複製對象應該是 Copy()。

例程該放棄的對象, 通缺失,責任到 呼叫者與孤兒開始...

例程接受的 呼叫者已分配的對象,並採取最終刪除 它採用開始 責任...(這種 編程風格很容易出錯;如果可能,請避免使用 。)

採用不能跟隨 以前的規則(如 構造函數)啓動 參數與採用的名稱程序...

[內容] [上一頁] [下一頁]點擊 的圖標電子郵件問題或 更正關於此材料到 Taligent人員。版權所有©1995 Taligent,Inc。版權所有。

在此之後,第一種方法可以被稱爲createLowerCaseStr()copyAsLowercaseStr()。領先關鍵字createcopy表示必須由調用方管理的新內存。

就個人而言,我會打電話給第二功能transformIntoLowercase()mutateIntoLowercase(),但我傾向於冗長的名字。儘管沒有被Taligent指定,但我看到了主要關鍵字transformmutate作爲就地轉換的提示。

+1

正是我在找的東西。謝謝。 – theanine 2010-11-20 04:13:24

+0

很高興爲您提供幫助。如果您想在書架上放些東西,本書可以打印(或者至少以前是這樣)。我有一個副本坐在我的,但我不再做C/C++了。儘管如此,對於只有一種語言的好主意並不是一個好主意...... – 2010-11-20 20:01:33

+0

可能值得一提的是,在某些編程語言中,可能使用具有不同簽名(參數)的相同方法名稱。 – bkausbk 2012-05-15 13:10:19

1

如果strToLowerInPlace返回「海峽」,那麼你可以簡單地寫new_s = strToLowerInPlace(strdup(s))。因此,我會放棄「InPlace」,並假設一切都在原地,而調用者可以根據需要複製。

(如果你將有兩個功能,至少使複製一個呼叫就地一個!)

0
  • 有一個叫tolower()沒有必要做瘋狂的測試功能,硬編碼轉換
  • 如果你已經有一個函數在原地進行縮小,爲什麼你要在非原地版本中重新實現代碼?
  • 命名爲OK
1

1:(!沒有分配)char *copylo(char *dst, const char *src);
第二:char *lowerize(char *data);