Какие соглашения об именах вы используете с функциями, которые выделяют память?

Итак, вот две функции, которые делают почти одно и то же.

Как бы вы назвали каждый из них, если бы вы включили оба в свой проект?

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 } 

EDIT: я изменил приведенный выше пример для правильности кода (sheesh)

    Мне очень нравятся стандарты кодирования Taligent , особенно соглашения об именах . Соглашение об использовании специальных имен для копирования, создания и принятия подпрограмм может применяться здесь:

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

    Используйте специальные имена для копирования, создания и принятия подпрограмм

    Подпрограммы, которые распределяют, управляют или берут на себя ответственность за хранение, имеют специальные имена и соблюдают следующие рекомендации:

    Процедуры, которые создают новый объект, который должен удалить вызывающий, начинаются с Create …

    Процедуры, которые копируют существующий объект, где вызывающий должен удалить копию, начинаются с Копировать … Функция-член, которая копирует объект, должна быть Копировать ().

    Процедуры, которые оставляют объект и передают делегирование ответственности вызывающему, начинаются с сироты …

    Процедуры, которые принимают объект, который вызывающий абонент выделил и несут ответственность за его окончательное удаление, начинаются с Adopt … (Этот стиль программирования подвержен ошибкам, избегайте его, если это возможно).

    Принятие подпрограмм, которые не могут следовать предыдущему правилу (например, конструкторы), начинаются с имени аргумента с помощью …

    [Содержание] [Предыдущая] [Следующая] Нажмите значок, чтобы отправить вопросы или исправления по этому материалу персоналу Taligent. Copyright © 1995 Taligent, Inc. Все права защищены.

    После этого первый метод можно назвать createLowerCaseStr() или copyAsLowercaseStr() . Ведущее ключевое слово create and copy указывает новую память, которая должна управляться вызывающим.

    Лично я бы назвал mutateIntoLowercase() функцию transformIntoLowercase() или mutateIntoLowercase() , но я склонен к длинным именам. Пока не указано Taligent, я вижу, что ключевые ключевые слова transform и mutate как намеки на трансформацию, выполненную на месте.

    Если strToLowerInPlace вернул ‘str’, вы могли бы просто написать new_s = strToLowerInPlace(strdup(s)) . Таким образом, я бы сбросил «InPlace» и предположил, что все было на месте, и вызывающий может дублировать по мере необходимости.

    (И если у вас будет две функции, по крайней мере сделайте копирование одним вызовом на месте!)

    1st: char *copylo(char *dst, const char *src); (нет ассигнований!)
    2nd: char *lowerize(char *data);

    • существует функция, называемая tolower() не нужно делать безумное тестирование и жестко закодированное преобразование
    • если у вас уже есть функция, создающая нижнюю шкалу на месте, почему вы переопределяете код в версии не на месте?
    • именование в порядке