1. problème
main.h
#ifndef _MAIN_H #define _MAIN_H unsigned char i; #fin si
main.c
#include "main.h" main () { ; }
ac
#include "main.h" 略
Puis compilez ac et main.c, vous serez invité Symbole i multiplier DÉTERMINÉE (par ao et main.o)
2. Analyse
2.1 #ifndef pas déjà compilé éviter les doublons?
#ifndef #define #ENDIF éviter une « répéter la compilation » au lieu de « Définition en double. »
compilation répétée peut entraîner des définitions en double, mais pas de sources en double définition répéter que la compilation.
À partir du code dans les programmes exécutables, il faut deux étapes
pour compiler et lier la
compilation du début, où tous les fichiers d' en- tête remplacés #include le fichier d' en- tête en code
à la compilation, compiler tous les fichiers source deviennent modules, chaque module chacune des variables et des fonctions ont été leur propre espace
dans l'étape de liaison, chacun des modules sont combinés ensemble
peut #ifndef être empêchée pendant la phase de compilation, un code est compilé répété, et ainsi éviter une variable répétée est définie ,
mais il ne fait pas obstacle la phase de liaison, chaque module a un nom de variable appelée, puis appelle l'erreur de liaison: redéfinition variables
3. Solution
Non seulement pour éviter une répétition #ifndef compilation de combinaison, et la variable est définie dans le fichier source, il suffit de mettre extern déclaré dans le fichier d'en-tête.
De sorte que chaque module au moment de la compilation, vous savez que « il y a tellement de variables, mais son espace est pas avec moi » lien lorsque la variable bien présente dans tous les modules comprennent le fichier d'en-tête, mais un seul module est son mami mensonges.