Condividi tramite


Convenzioni di stile di codifica

Le convenzioni di stile di codifica vengono usate in questa serie di esempi per facilitare la chiarezza e la coerenza. Vengono usate le convenzioni di notazione "ungherese". Questi sono diventati una pratica comune di codifica nella programmazione Win32. Includono le notazioni del prefisso delle variabili che danno ai nomi delle variabili un suggerimento del tipo della variabile.

La tabella seguente elenca i prefissi comuni.

Prefisso Descrizione
a Array
b BOOL (int)
c Char
Cb Numero di byte
Cr Valore di riferimento colore
Cx Numero di x (breve)
dw DWORD (long senza segno)
f Flag (in genere più valori di bit)
fn Funzione
G_ Globale
h Handle
i Integer
l long
lp Puntatore lungo
M_ Membro dati di una classe
n Breve int
p Puntatore
s string
sz Stringa terminata zero
tm Metrica di testo
u Senza segno int
Ul Unsigned long (ULONG)
w WORD (unsigned short)
x,y coordinate x, y (breve)

 

Queste sono spesso combinate, come illustrato di seguito.

Combinazione di prefisso Descrizione
pszMyString Puntatore a una stringa.
m_pszMyString Puntatore a una stringa membro dati di una classe.

 

Altre convenzioni sono elencate nella tabella seguente.

Convenzione Descrizione
CMyClass Prefisso 'C' per i nomi di classe C++.
COMyObjectClass Prefisso 'CO' per i nomi delle classi di oggetti COM.
CFMyClassFactory Prefisso 'CF' per i nomi della classe COM.
IMyInterface Prefisso 'I' per i nomi delle classi di interfaccia COM.
CImpIMyInterface Prefisso 'CImpI' per le classi di implementazione dell'interfaccia COM.

 

Alcune convenzioni coerenti per i blocchi di intestazione di commento vengono usate in questa serie di esempi come indicato di seguito.

Intestazione file

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

Blocco commento normale

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

Intestazione dichiarazione di 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*/

Intestazione definizione del metodo di 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*/

Funzione non esportata o locale

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

Intestazione di definizione della funzione esportata

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

Intestazione della dichiarazione dell'interfaccia 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*/

Intestazione della dichiarazione della classe oggetto 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*/

Tutte queste convenzioni dei blocchi di commento hanno stringhe di token iniziali e finali coerenti. Questa coerenza supporta l'elaborazione automatica delle intestazioni in qualche modo. Ad esempio, gli script AWK possono essere scritti per filtrare le intestazioni della funzione in un file di testo separato che può quindi fungere da base per un documento di specifica. Analogamente, gli strumenti come l'utilità AUTODUCK non supportata (attualmente disponibile nel CD-ROM della libreria di sviluppo di Microsoft Developer Network) possono essere usati per elaborare i blocchi di commento in queste intestazioni.

La tabella seguente elenca le stringhe di token iniziali e finali usate nelle esercitazioni di esempio.

token Descrizione
/*+ Inizio intestazione file
+*/ Fine intestazione file
/*- Intestazione del blocco di commento normale Begin
-*/ Fine intestazione blocco commento normale
/*C Intestazione classe Begin
C*/ Fine intestazione classe
/*M Inizio intestazione metodo
M*/ Fine intestazione metodo
/*F Inizio intestazione funzione
F*/ Fine intestazione funzione
/*Ho Inizio intestazione interfaccia
Ho*/ Fine intestazione interfaccia
/*O Inizio intestazione classe oggetto COM
O*/ Fine intestazione classe oggetto COM

 

Queste intestazioni possono essere usate anche come segnali visivi per l'analisi rapida dei file di origine. Offrono anche praticità per accedere rapidamente a un percorso di origine se si configurano stringhe di ricerca nell'editor e quindi si ripete l'ultima ricerca per individuare rapidamente queste intestazioni.

Ad esempio, la stringa di ricerca "M+M" individua l'inizio delle intestazioni del metodo e "M-M" individua l'inizio del codice di definizione/implementazione del metodo effettivo.