繁体   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