Compartir a través de


Convenciones de estilo de codificación

Las convenciones de estilo de codificación se usan en esta serie de ejemplo para ayudar a la claridad y la coherencia. Se usan las convenciones de notación "húngaro". Estos se han convertido en una práctica de codificación común en la programación win32. Incluyen notaciones de prefijo de variable que proporcionan a los nombres de variable una sugerencia del tipo de la variable.

En la tabla siguiente se enumeran los prefijos comunes.

Prefijo Descripción
a Array
b BOOL (int)
c Char
cb Recuento de bytes
cr Valor de referencia de color
Cx Recuento de x (short)
dw DWORD (unsigned long)
f Marcas (normalmente varios valores de bits)
fn Función
G_ Global
h Handle
i Entero
l long
lp Puntero largo
M_ Miembro de datos de una clase
n Short int
p Puntero
s String
sz Cadena terminada en cero
tm Métrica de texto
u Unsigned int
Ul Long sin signo (ULONG)
w WORD (unsigned short)
x,y coordenadas x, y (short)

 

A menudo se combinan, como se muestra a continuación.

Combinación de prefijo Descripción
pszMyString Puntero a una cadena.
m_pszMyString Puntero a una cadena que es un miembro de datos de una clase.

 

En la tabla siguiente se enumeran otras convenciones.

Convención Descripción
CMyClass Prefijo "C" para los nombres de clase de C++.
COMyObjectClass Prefijo "CO" para los nombres de clase de objeto COM.
CFMyClassFactory Prefijo "CF" para nombres de generador de clases COM.
IMyInterface Prefijo "I" para los nombres de clase de interfaz COM.
CImpIMyInterface Prefijo "CImpI" para las clases de implementación de interfaz COM.

 

Algunas convenciones coherentes para los bloques de encabezado de comentario se usan en esta serie de ejemplo como se indica a continuación.

Encabezado de archivo

/*+===================================================================
  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.
===================================================================+*/

Bloque de comentarios sin formato

/*--------------------------------------------------------------------
  Plain block of comment text that usually takes several lines.
  Plain block of comment text that usually takes several lines.
--------------------------------------------------------------------*/

Encabezado de declaración de clase

/*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*/

Encabezado de definición del método de clase

/*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*/

Función local o noportada

/*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*/

Encabezado de definición de función 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*/

Encabezado de declaración de interfaz 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*/

Encabezado de declaración de clase 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 estas convenciones de bloque de comentarios tienen cadenas de token inicial y final coherentes. Esta coherencia admite el procesamiento automático de los encabezados de alguna manera. Por ejemplo, los scripts de AWK se pueden escribir para filtrar los encabezados de función en un archivo de texto independiente que, a continuación, puede servir como base para un documento de especificación. De forma similar, se pueden usar herramientas como la utilidad AUTODUCK no compatible (disponible actualmente en la CD-ROM de la biblioteca de desarrollo de red para desarrolladores de Microsoft) para procesar los bloques de comentarios en estos encabezados.

En la tabla siguiente se enumeran las cadenas de token iniciales y finales que se usan en los tutoriales de ejemplo.

Token Descripción
/*+ Inicio del encabezado de archivo
+*/ Fin del encabezado de archivo
/*- Inicio del encabezado del bloque de comentarios sin formato
-*/ Fin del encabezado del bloque de comentarios sin formato
/*C Comienzo del encabezado de clase
C*/ Fin del encabezado de clase
/*M Comienzo del encabezado del método
M*/ Fin del encabezado del método
/*F Comienzo del encabezado de función
F*/ Fin del encabezado de función
/*I Inicio del encabezado de interfaz
I*/ Fin del encabezado de interfaz
/*O Comienzo del encabezado de clase de objeto COM
O*/ Fin de encabezado de clase de objeto COM

 

Estos encabezados también se pueden usar como indicaciones visuales para el examen rápido de archivos de origen. También proporcionan comodidad para llegar rápidamente a alguna ubicación de origen si configura cadenas de búsqueda en el editor y luego "repetir la última búsqueda" para localizar rápidamente estos encabezados.

Por ejemplo, la cadena de búsqueda "M+M" buscará el inicio de los encabezados de método y "M-M" buscará el principio del código de definición o implementación del método real.