web-dev-qa-db-fra.com

Pourquoi #ifndef et #define sont-ils utilisés dans les fichiers d'en-tête C ++?

J'ai vu le code comme celui-ci habituellement au début des fichiers d'en-tête:

#ifndef HEADERFILE_H
#define HEADERFILE_H

Et à la fin du fichier est

#endif

Quel est le but de ceci?

441
Asad Khan

Celles-ci s'appellent # incluent les gardes .

Une fois que l'en-tête est inclus, il vérifie si une valeur unique (dans ce cas, HEADERFILE_H) est définie. Ensuite, si ce n'est pas défini, il le définit et continue vers le reste de la page.

Lorsque le code est à nouveau inclus, le premier ifndef échoue, ce qui entraîne un fichier vide.

Cela empêche la double déclaration d'identificateurs tels que les types, les énumérations et les variables statiques.

473
LiraNuna
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif

#ifndef vérifie si le jeton donné a été #defined plus tôt dans le fichier ou dans un fichier inclus; sinon, il inclut le code entre lui et le #else de clôture ou, si aucun #else n'est présent, l'instruction #endif. #ifndef est souvent utilisé pour rendre les fichiers d'en-tête idempotents en définissant un jeton une fois que le fichier a été inclus et en vérifiant que le jeton n'a pas été défini en haut de ce fichier.

#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
29
Roy

Cela empêche d'inclure plusieurs fois plusieurs fois le même fichier d'en-tête.

#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif

Supposons que vous ayez inclus ce fichier d’en-tête dans plusieurs fichiers. Donc, la première fois que __COMMON_H__ n'est pas défini, il sera défini et le fichier d'en-tête est inclus.

La prochaine fois que __COMMON_H__ est défini, il ne sera plus inclus.

8
Sandeep_black