这里有两个几乎做同样事情的函数。
如果你必须把这两个函数都包含在你的项目中,你会如何命名?
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)
我很喜欢 塔里根编码标准,特别是 命名惯例. 《公约》规定: 为复制、创建和采用例程使用特殊名称 可在此申请。
https:/root.cern.chTaligentDocsTaligentOnlineDocumentRoot1.0DocsbooksWMWM_67.html#0。
在复制、创建和采用例程时使用特殊名称。
分配、管理或负责存储的例程有特殊的名称,并遵守以下准则。
创建一个新的对象,调用者必须删除该对象的例程,以Create... 开始。
复制一个现有对象的例程,调用者必须删除副本,以Copy...开头。复制对象的成员函数应该是Copy()。
放弃一个对象并将删除责任转移给调用者的例程以 Orphan...开头。
接受调用者分配的对象并承担最终删除它的责任的例程以Adopt...开始。(这种编程方式容易出错,尽量避免。)
不能遵循前一条规则的adoption例程(如asconstructors),其参数名以adoption...开头。
[目录] [上一页] [下一页] 点击图标,将有关本资料的问题或更正寄给Taligent人员。Copyright©1995Taligent,Inc. 保留所有权利。
在这之后,第一个方法可以被调用 createLowerCaseStr()
或 copyAsLowercaseStr()
. 主要关键词create
和 copy
表示必须由调用者管理的新内存。
就个人而言,我会把第二个函数叫做 transformIntoLowercase()
或 mutateIntoLowercase()
但我倾向于长的名字。虽然Taligent没有指定,但我看到了前导关键词是 transform
和 mutate
作为就地完成改造的提示。
如果 strToLowerInPlace
返回'str',那么你可以简单地写 new_s = strToLowerInPlace(strdup(s))
. 因此,我会放弃 "InPlace",假设一切都在原地,调用者可以根据需要进行复制。
(如果你 是 要有两个功能,至少要让复制的功能调用原地的功能!)
第1次:(没有分配!) char *copylo(char *dst, const char *src);
(没有分配!) 第二: char *lowerize(char *data);
tolower()
无需进行疯狂的测试和硬编码转换