Соглашения о стиле программирования
Соглашения о стиле программирования используются в этой серии примеров с целью обеспечения четкости и согласованности. Используются соглашения венгерской нотации. Они стали распространенной практикой написания кода в программировании Win32. Они включают префиксные обозначения переменных, которые дают понимание о типе переменной по имени переменной.
В следующей таблице перечислены распространенные префиксы.
Приставка | Описание |
---|---|
a | Массив |
b | BOOL (int) |
с | Уголь |
cb | Количество байтов |
cr | Эталонное значение цвета |
cx | Количество x (short) |
dw | DWORD (без знака long) |
f | Флаги (обычно несколько битовых значений) |
fn | Функция |
g_ | Глобальный |
h | Ручка |
я | Целое число |
l | Длинный |
lp | Длинный указатель |
m_ | Член данных класса |
n | Короткий int |
p | Указатель |
s | Струна |
sz | Строка с нулевым окончанием |
Тм | Метрика текста |
u | Неподписанный int |
Ул | Unsigned long (ULONG) |
w | WORD (без знака short) |
x,y | Координаты x, y (кратко) |
Они часто объединяются, как показано ниже.
Сочетание префикса | Описание |
---|---|
pszMyString | Указатель на строку. |
m_pszMyString | Указатель на строку, являющуюся членом класса. |
Другие соглашения перечислены в следующей таблице.
Конвенция | Описание |
---|---|
CMyClass | Префикс "C" для имен классов C++. |
COMyObjectClass | Префикс "CO" для имен классов объектов COM. |
CFMyClassFactory | Префикс CF для названий фабрик классов COM. |
IMyInterface | Префикс "I" для имен классов ИНТЕРФЕЙСА COM. |
CImpIMyInterface | Префикс CImpI для классов реализации интерфейса COM. |
Некоторые согласованные соглашения для блоков заголовков комментариев используются в этом примере серии, как показано ниже.
Заголовок файла
/*+===================================================================
File: MYFILE.EXT
Summary: Brief summary of the file contents and purpose.
Classes: Classes declared or used (in source files).
Functions: Functions exported (in source files).
Origin: Indications of where content may have come from. This
is not a change history but rather a reference to the
editor-inheritance behind the content or other
indications about the origin of the source.
Copyright and Legal notices.
Copyright and Legal notices.
===================================================================+*/
Стандартный блок примечаний
/*--------------------------------------------------------------------
Plain block of comment text that usually takes several lines.
Plain block of comment text that usually takes several lines.
--------------------------------------------------------------------*/
Заголовок объявления класса
/*C+C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C+++C
Class: CMyClass
Summary: Short summary of purpose and content of CMyClass.
Short summary of purpose and content of CMyClass.
Methods: MyMethodOne
Short description of MyMethodOne.
MyMethodTwo
Short description of MyMethodTwo.
CMyClass
Constructor.
~CMyClass
Destructor.
C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C---C-C*/
Заголовок определения метода класса
/*M+M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M+++M
Method: CMyClass::MyMethodOne
Summary: Short summary of purpose and content of MyMethodOne.
Short summary of purpose and content of MyMethodOne.
Args: MYTYPE MyArgOne
Short description of argument MyArgOne.
MYTYPE MyArgTwo
Short description of argument MyArgTwo.
Modifies: [list of member data variables modified by this method].
Returns: MYRETURNTYPE
Short description of meaning of the return type values.
M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M-M*/
Неэкспортируемая или локальная функция
/*F+F+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function: MyLocalFunction
Summary: What MyLocalFunction is for and what it does.
Args: MYTYPE MyFunctionArgument1
Description.
MYTYPE MyFunctionArgument1
Description.
Returns: MyReturnType
Description.
-----------------------------------------------------------------F-F*/
Экспортируемый заголовок определения функции
/*F+F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F+++F
Function: MyFunction
Summary: What MyFunction is for and what it does.
Args: MYTYPE MyFunctionArgument1
Description.
MYTYPE MyFunctionArgument1
Description.
Returns: MyReturnType
Description.
F---F---F---F---F---F---F---F---F---F---F---F---F---F---F---F---F-F*/
Заголовок декларации интерфейса COM
/*I+I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I+++I
Interface: IMyInterface
Summary: Short summary of what features the interface can bring to
a COM Component.
Methods: MYTYPE MyMethodOne
Description.
MYTYPE MyMethodTwo
Description.
I---I---I---I---I---I---I---I---I---I---I---I---I---I---I---I---I-I*/
Заголовок объявления класса объектов COM
/*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O
ObjectClass: COMyCOMObject
Summary: Short summary of purpose and content of this object.
Interfaces: IUnknown
Standard interface providing COM object features.
IMyInterfaceOne
Description.
IMyInterfaceTwo
Description.
Aggregation: [whether this COM Object is aggregatable or not]
O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/
Все эти конвенции блоков комментариев имеют согласованные строки начала и окончания токенов. Эта согласованность поддерживает автоматическую обработку заголовков в некоторой форме. Например, скрипты AWK можно записать для фильтрации заголовков функций в отдельный текстовый файл, который затем может служить основой для документа спецификации. Аналогичным образом средства, такие как неподдерживаемая программа AUTODUCK (в настоящее время доступна в библиотеке разработки сети разработчиков Майкрософт CD-ROM) можно использовать для обработки блоков комментариев в этих заголовках.
В следующей таблице перечислены начальные и конечные строки маркеров, используемые в примерах учебных пособий.
Жетон | Описание |
---|---|
/*+ | Начало заголовка файла |
+*/ | Конец заголовка файла |
/*- | Начало блока простого комментария Заголовок |
-*/ | Конец заголовка блока простого комментария |
/*C | Начало заголовка класса |
C*/ | Конец заголовка класса |
/*M | Начало заголовка метода |
M*/ | Конец заголовка метода |
/*F | Начало заголовка функции |
F*/ | Конец заголовка функции |
/*Я | Начало интерфейсного заголовка |
Я*/ | Конец заголовка интерфейса |
/*O | Начало заголовка класса объектов COM |
O*/ | Конец заголовка класса ОБЪЕКТОВ COM |
Эти заголовки также можно использовать в качестве визуальных подсказок для быстрого сканирования исходных файлов. Они также обеспечивают удобство быстрого доступа к некоторому месту в исходном коде, если вы настроите строки поиска в редакторе и затем повторите последний поиск, чтобы быстро найти эти заголовки.
Например, в строке поиска "M+M" будет находиться начало заголовков методов, а "M-M" будет находить начало фактического кода определения метода или реализации.