Conventions de style de codage
Les conventions de style de codage sont utilisées dans cet exemple de série pour faciliter la clarté et la cohérence. Les conventions de notation « hongroise » sont utilisées. Celles-ci sont devenues une pratique de codage courante dans la programmation Win32. Ils incluent des notations de préfixe de variable qui donnent aux noms de variables une suggestion du type de la variable.
Le tableau suivant répertorie les préfixes courants.
Préfixe | Description |
---|---|
a | Array |
b | BOOL (int) |
c | Char |
cb | Nombre d’octets |
cr | Valeur de référence de couleur |
Cx | Nombre de x (court) |
dw | DWORD (long non signé) |
f | Indicateurs (généralement plusieurs valeurs de bits) |
fn | Fonction |
G_ | Global |
h | Handle |
i | Integer |
l | Long |
lp | Pointeur long |
M_ | Membre de données d’une classe |
n | Short int |
p | Pointeur |
s | String |
sz | Chaîne sans fin |
tm | Métrique de texte |
u | Int non signé |
Ul | Long non signé (ULONG) |
w | WORD (court non signé) |
x,y | coordonnées x, y (courte) |
Ces éléments sont souvent combinés, comme dans ce qui suit.
Combinaison de préfixes | Description |
---|---|
pszMyString | Pointeur vers une chaîne. |
m_pszMyString | Pointeur vers une chaîne qui est un membre de données d’une classe. |
D’autres conventions sont répertoriées dans le tableau suivant.
Convention | Description |
---|---|
CMyClass | Préfixe « C » pour les noms de classes C++. |
COMyObjectClass | Préfixe « CO » pour les noms de classes d’objets COM. |
CFMyClassFactory | Préfixe 'CF' pour les noms de fabrique de classes COM. |
IMyInterface | Préfixe « I » pour les noms de classes d’interface COM. |
CImpIMyInterface | Préfixe « CImpI » pour les classes d’implémentation d’interface COM. |
Certaines conventions cohérentes pour les blocs d’en-tête de commentaire sont utilisées dans cet exemple de série, comme suit.
En-tête de fichier
/*+===================================================================
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.
===================================================================+*/
Bloc de commentaires bruts
/*--------------------------------------------------------------------
Plain block of comment text that usually takes several lines.
Plain block of comment text that usually takes several lines.
--------------------------------------------------------------------*/
En-tête de déclaration 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*/
En-tête de définition de méthode 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*/
Fonction locale ou non exporté
/*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*/
En-tête de définition de fonction exporté
/*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*/
En-tête de déclaration d’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*/
En-tête de déclaration de classe d’objet 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*/
Toutes ces conventions de blocs de commentaires ont des chaînes de jeton de début et de fin cohérentes. Cette cohérence prend en charge le traitement automatique des en-têtes d’une manière ou d’une autre. Par exemple, les scripts AWK peuvent être écrits pour filtrer les en-têtes de fonction dans un fichier texte distinct qui peut ensuite servir de base à un document de spécification. De même, des outils comme l’utilitaire AUTODUCK non pris en charge (actuellement disponible sur le CD-ROM de la bibliothèque de développement Microsoft Developer Network) peuvent être utilisés pour traiter les blocs de commentaires dans ces en-têtes.
Le tableau suivant répertorie les chaînes de jetons de début et de fin utilisées dans des exemples de didacticiels.
par jeton | Description |
---|---|
/*+ | Début de l’en-tête de fichier |
+*/ | Fin de l’en-tête de fichier |
/*- | Début de l’en-tête du bloc de commentaires brut |
-*/ | Fin d’en-tête du bloc de commentaires brut |
/*C | Début de l’en-tête de classe |
C*/ | Fin d’en-tête de classe |
/*M | Début de l’en-tête de la méthode |
M*/ | Fin d’en-tête de méthode |
/*F | Début de l’en-tête de fonction |
F*/ | Fin de l’en-tête de fonction |
/*Je | Début de l’en-tête d’interface |
Je*/ | Fin d’en-tête d’interface |
/*O | Début de l’en-tête de classe d’objet COM |
O*/ | Fin d’en-tête de classe d’objet COM |
Ces en-têtes peuvent également être utilisés comme signaux visuels pour une analyse rapide des fichiers sources. Ils permettent également d’accéder rapidement à un emplacement source si vous configurez des chaînes de recherche dans votre éditeur, puis « répétez la dernière recherche » pour localiser rapidement ces en-têtes.
Par exemple, la chaîne de recherche « M+M » localisera le début des en-têtes de méthode, et « M-M » localisera le début de la définition/du code d’implémentation de la méthode réelle.