Convenções de estilo de codificação
As convenções de estilo de codificação são usadas nesta série de exemplo para ajudar na clareza e consistência. As convenções de notação "húngara" são usadas. Elas se tornaram uma prática comum de codificação na programação do Win32. Elas incluem notações de prefixo variável que dão a nomes de variáveis uma sugestão do tipo da variável.
A tabela a seguir lista prefixos comuns.
Prefixo | Descrição |
---|---|
um | Array |
b | BOOL (int) |
c | Char |
cb | Contagem de bytes |
cr | Valor de referência de cor |
Cx | Contagem de x (curto) |
dw | DWORD (long sem sinal) |
f | Sinalizadores (geralmente valores de vários bits) |
fn | Função |
G_ | Global |
h | Handle |
i | Inteiro |
l | long |
lp | Ponteiro longo |
M_ | Membro de dados de uma classe |
n | Int curto |
p | Ponteiro |
s | String |
Sz | Cadeia de caracteres terminada zero |
tm | Métrica de texto |
u | Int sem sinal |
Ul | Long sem sinal (ULONG) |
w | WORD (sem sinal curto) |
x,y | Coordenadas x, y (curto) |
Geralmente, eles são combinados, como no exemplo a seguir.
Combinação de prefixo | Descrição |
---|---|
pszMyString | Um ponteiro para uma cadeia de caracteres. |
m_pszMyString | Um ponteiro para uma cadeia de caracteres que é um membro de dados de uma classe. |
Outras convenções são listadas na tabela a seguir.
Convenção | Descrição |
---|---|
Cmyclass | Prefixo 'C' para nomes de classe C++. |
COMyObjectClass | Prefixo 'CO' para nomes de classe de objeto COM. |
CFMyClassFactory | Prefixo 'CF' para nomes de fábrica de classes COM. |
Imyinterface | Prefixo 'I' para nomes de classe de interface COM. |
CImpIMyInterface | Prefixo 'CImpI' para classes de implementação de interface COM. |
Algumas convenções consistentes para blocos de cabeçalho de comentário são usadas nesta série de exemplo da seguinte maneira.
Cabeçalho do Arquivo
/*+===================================================================
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.
===================================================================+*/
Bloco de Comentários Sem Formatação
/*--------------------------------------------------------------------
Plain block of comment text that usually takes several lines.
Plain block of comment text that usually takes several lines.
--------------------------------------------------------------------*/
Cabeçalho de declaração de classe
/*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*/
Cabeçalho de definição do método de classe
/*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*/
Função local ou sem suporte
/*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*/
Cabeçalho de definição de função exportada
/*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*/
Cabeçalho de declaração da interface 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*/
Cabeçalho de declaração da classe de objeto 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*/
Todas essas convenções de bloco de comentário têm cadeias de caracteres de token de início e término consistentes. Essa consistência dá suporte ao processamento automático dos cabeçalhos de alguma forma. Por exemplo, scripts AWK podem ser gravados para filtrar os cabeçalhos de função em um arquivo de texto separado que pode servir como base para um documento de especificação. Da mesma forma, ferramentas como o utilitário AUTODUCK sem suporte (atualmente disponível no CD-ROM da Biblioteca de Desenvolvimento de Rede do Desenvolvedor da Microsoft) podem ser usadas para processar os blocos de comentários nesses cabeçalhos.
A tabela a seguir lista as cadeias de caracteres de token inicial e final usadas em tutoriais de exemplo.
Token | Descrição |
---|---|
/*+ | Início do Cabeçalho do Arquivo |
+*/ | Fim do cabeçalho do arquivo |
/*- | Início do cabeçalho do bloco de comentários sem formatação |
-*/ | Fim do cabeçalho do bloco de comentário sem formatação |
/*C | Início do cabeçalho de classe |
C*/ | Fim do Cabeçalho de Classe |
/*M | Início do Cabeçalho do Método |
M*/ | Final do cabeçalho do método |
/*F | Início do Cabeçalho da Função |
F*/ | Final do cabeçalho da função |
/*Eu | Início do cabeçalho da interface |
Eu*/ | Fim do cabeçalho da interface |
/*O | Cabeçalho da classe de objeto COM Begin |
O*/ | Final do cabeçalho da classe de objeto COM |
Esses cabeçalhos também podem ser usados como indicações visuais para verificação rápida de arquivos de origem. Eles também fornecem conveniência para acessar rapidamente algum local de origem se você configurar cadeias de caracteres de pesquisa em seu editor e, em seguida, "repetir a última pesquisa" para localizar rapidamente esses cabeçalhos.
Por exemplo, a cadeia de caracteres de pesquisa "M+M" localizará o início dos cabeçalhos do método e "M-M" localizará o início do código de definição/implementação do método real.