« Les fichiers en-tête conduit à analyser et résoudre Symbole xxx multiplier définition en double définie de »

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.

 

  

 

 

  

  

Je suppose que tu aimes

Origine www.cnblogs.com/zhuangquan/p/12625106.html
conseillé
Classement