Déclarations et définitions (C++)

Les déclarations indiquent au compilateur qu'un élément ou qu'un nom de programme existe. Les définitions spécifient le code ou les données décrites par le nom. Pour pouvoir être utilisé, un nom doit être préalablement déclaré.

Déclarations

Une déclaration introduit un ou plusieurs noms dans un programme. Les déclarations peuvent se produire plusieurs fois dans un programme. Par conséquent, les classes, les structures, les types énumérés et d'autres types définis par l'utilisateur peuvent être déclarés pour chaque unité de compilation. Sur cette déclaration multiple, la contrainte est que toutes les déclarations doivent être identiques. Les déclarations servent également de définitions, sauf lorsque la déclaration :

  1. est un prototype de fonction (une déclaration de fonction sans corps de fonction) ;

  2. contient le spécificateur extern, mais ne contient aucun initialiseur (objets et variables) ni corps de fonction (fonctions). Cela signifie que la définition n'est pas nécessairement dans l'unité de traduction actuelle et donne une liaison externe au nom.

  3. est celle d'une donnée membre static dans une déclaration de classe ;

    Les données membres de classe static sont des variables discrètes partagées par tous les objets de la classe. Elles doivent être définies et initialisées en dehors de la déclaration de classe. (Pour plus d'informations sur les classes et les membres de classe, consultez Classes.)

  4. est une déclaration de nom de classe qui n'est pas suivie par une définition, par exemple class T; ;

  5. est une instruction typedef.

Voici des exemples de déclarations qui sont également des définitions :

// Declare and define int variables i and j.
int i;
int j = 10;

// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox.
class CheckBox : public Control
{
public:
            Boolean IsChecked();
    virtual int     ChangeState() = 0;
};

Voici des déclarations qui ne sont pas des définitions :

extern int i;
char *strchr( const char *Str, const char Target );

Définitions

Une définition est une spécification unique d'un objet, d'une variable, d'une fonction, d'une classe ou d'un énumérateur. Les définitions devant être uniques, un programme peut contenir une seule définition d'un élément de programme donné. Il peut exister une correspondance plusieurs-à-un entre les déclarations et les définitions. Voici deux cas dans lesquels un élément de programme peut être déclaré et non défini :

  1. Une fonction est déclarée, mais elle n'est jamais référencée avec un appel de fonction ou une expression qui prend l'adresse de la fonction.

  2. Une classe est uniquement utilisée d'une façon qui ne requiert pas que sa définition soit connue. Toutefois, la classe doit être déclarée. Le code suivant illustre ce type de situation :

    // definitions.cpp
    class WindowCounter;   // Forward reference; no definition
    
    class Window
    {
       // Definition of WindowCounter not required
       static WindowCounter windowCounter;
    };
    
    int main()
    {
    }
    

Voir aussi

Référence

Concepts de base