对于分配内存的函数,你遵循什么样的命名惯例?

问题描述 投票:3回答:4

这里有两个几乎做同样事情的函数。

如果你必须把这两个函数都包含在你的项目中,你会如何命名?

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)

c string naming-conventions
4个回答
3
投票

我很喜欢 塔里根编码标准,特别是 命名惯例. 《公约》规定: 为复制、创建和采用例程使用特殊名称 可在此申请。

https:/root.cern.chTaligentDocsTaligentOnlineDocumentRoot1.0DocsbooksWMWM_67.html#0。

在复制、创建和采用例程时使用特殊名称。

分配、管理或负责存储的例程有特殊的名称,并遵守以下准则。

创建一个新的对象,调用者必须删除该对象的例程,以Create... 开始。

复制一个现有对象的例程,调用者必须删除副本,以Copy...开头。复制对象的成员函数应该是Copy()。

放弃一个对象并将删除责任转移给调用者的例程以 Orphan...开头。

接受调用者分配的对象并承担最终删除它的责任的例程以Adopt...开始。(这种编程方式容易出错,尽量避免。)

不能遵循前一条规则的adoption例程(如asconstructors),其参数名以adoption...开头。

[目录] [上一页] [下一页] 点击图标,将有关本资料的问题或更正寄给Taligent人员。Copyright©1995Taligent,Inc. 保留所有权利。

在这之后,第一个方法可以被调用 createLowerCaseStr()copyAsLowercaseStr(). 主要关键词createcopy 表示必须由调用者管理的新内存。

就个人而言,我会把第二个函数叫做 transformIntoLowercase()mutateIntoLowercase()但我倾向于长的名字。虽然Taligent没有指定,但我看到了前导关键词是 transformmutate 作为就地完成改造的提示。


1
投票

如果 strToLowerInPlace 返回'str',那么你可以简单地写 new_s = strToLowerInPlace(strdup(s)). 因此,我会放弃 "InPlace",假设一切都在原地,调用者可以根据需要进行复制。

(如果你 要有两个功能,至少要让复制的功能调用原地的功能!)


1
投票

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


0
投票
  • 有一个函数叫 tolower() 无需进行疯狂的测试和硬编码转换
  • 如果你已经有了一个函数来实现原位小写,你为什么要重新实现非原位版本的代码?
  • 命名没问题
© www.soinside.com 2019 - 2024. All rights reserved.