您使用分配内存的函数遵循哪些命名约定?

时间:2010-11-18 23:30:27

标签: c string naming-conventions

所以这里有两个功能几乎完全相同。

如果您必须在项目中同时包含两者,您会如何命名每一个?

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)修改了上面的例子

4 个答案:

答案 0 :(得分: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

  

使用特殊名称进行复制,创建,   并采用例行程序

     

分配,管理或的常规   承担存储责任   特殊名称并遵守   遵循指南:

     

例行公事   创建一个调用者必须的新对象   删除以Create ...

开头      

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

     

放弃对象的例程   将删除责任传递给   来电者从孤儿开始......

     

接受一个对象的例程   来电已分配并接受   最终删除的责任   它以Adopt ...开头(这种风格   编程容易出错;躲开它   如果可能的话。)

     

采用无法遵循的惯例   先前的规则(例如   构造函数)启动名称   采纳的论点......

     

[目录] [上一页] [下一页]点击   邮件问题的图标或   有关此材料的更正   Taligent人员。版权所有©1995   Taligent公司,公司。保留所有权利。

在此之后,可以将第一种方法称为createLowerCaseStr()copyAsLowercaseStr()。前导关键字createcopy表示必须由调用者管理的新内存。

就个人而言,我会调用第二个函数transformIntoLowercase()mutateIntoLowercase(),但我倾向于使用冗长的名字。虽然Taligent没有指定,但我会看到主要关键字transformmutate作为现场转换的提示。

答案 1 :(得分:1)

如果strToLowerInPlace返回'str',那么您只需编写new_s = strToLowerInPlace(strdup(s))即可。因此,我放弃“InPlace”并假设所有内容都已到位,并且调用者可以根据需要复制。

(如果你 将有两个功能,至少让复制一个人调用就地一个!)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  • 有一个名为tolower()的函数,无需进行疯狂测试和硬编码转换
  • 如果您已经有一个就地小写的功能,为什么要重新实现非就地版本的代码?
  • 命名正常