Глава 5. Соглашения об именах и комментариях_____________________123_

нием, например, DOSGL (DOS Graphics Library, Графическая библиотека DOS), то полезно будет приписывать к именам функций шапку DOSGL:

DOSGLCreateBitmap(...);

Такая практика поможет вам избежать конфликтов, возникающих при использовании нескольких библиотек.

Ваш путь к самодокументируемому коду

В заключение давайте вкратце рассмотрим итог аккуратного выбора имен переменных (в соответствии с какими-либо соглашениями) в сочетании с разумным применением комментариев. Когда вы достигнете совершенства в соединении этих двух приемов, ваши программы действительно станут говорящими. По словам Бьерна Страуструпа только тот язык действительно является языком, который позволяет писать программы, понятные без дополнительной документации.

В приведенном примере мы вновь вернемся к функции ConvertinternalNameToFirstLast и посмотрим, как преобразит ее текст применение венгерской нотации и рекомендаций Zinc Application Framework.

// Эта функция получает на входе имя во внутреннем формате, // представляющее собой пару имя/фамилия в виде (фамилия, имя), // преобразует ее в форму имя фамилия и возвращает результат в // переменной IpszFisrtLastResult. Обязанность обеспечить нужный // объем памяти для результата лежит на вызывающей функции. //В случае ошибки функция возвращает пустую строку.

void ConvertInternalNameToFirstLast(char *lpszInternalName;

char *lpszFirstLastResult) (

const char TERMINATING_NULL = '\0' ;

char *pchCurrent;

*lpSzFirstLastResult = TERMINATING_NULL;

// Игнорируем неверные ведущие символы.

while (*lpszInternalName && *lpszInternalName != '(')

(

lpszInternalNante++;

)

if (*lpszInternalName == TERMINATING_NULL) return;

// Пропускаем открывающую скобку — она не входит ' // в результат.

pchCurrent = ++lpsz Internal-Name;

// Ищем первую запятую или закрывающую скобку. Скобку // включаем в поиск, чтобы отловить однословные имена // типа Madonna.