"Archivos de encabezado llevó a analizar y resolver Símbolo XXX multiplican definido definición duplicada de"

1. Problema

main.h

#ifndef _MAIN_H 
#define _MAIN_H 

unsigned char i; 

#terminara si

main.c

#include "main.h" 

main () 
{ 
  ;  
}

C.A

# include "main.h" 

  Entonces ac compilación y main.c, se le pedirá símbolo i se multiplican definido (por ao y main.o)

 

2. Análisis

2.1 #ifndef no ya prevenir la duplicación compilado?

  #ifndef #define #ENDIF prevenir una "repetir la compilación" en lugar de "Duplicar Definición".
  Repita la compilación puede dar lugar a definiciones duplicadas, pero no las fuentes de definición de duplicados sólo se repita la compilación.

  A partir del código en los programas ejecutables, que requiere dos pasos
  para compilar y enlazar
  compilar el comienzo, en el que todos los archivos de cabecera reemplazados #include el archivo de cabecera en el código
  en tiempo de compilación, compilar todos los archivos de origen se convierten en módulos, cada módulo cada uno variables y funciones han sido su propio espacio
  en la etapa de enlace, cada uno de los módulos se combinan junto

  #ifndef se puede evitar durante la fase de la compilación, un código se compila repitió, y de ese modo evitar una variable repetida se define
  pero no impide fase de enlace, cada módulo tiene un nombre variable llamada, a continuación, llamado el error de enlace: redefinición variables

 

3. Solución

  No sólo para prevenir una combinación compilación de repetición #ifndef, y la variable se define en el archivo de origen, sólo hay que poner extern declarado en el archivo de cabecera.

  De manera que cada módulo en tiempo de compilación, usted sabe que "hay muchas variables, pero su espacio no está conmigo" que aparece cuando la variable aunque está presente en todos los módulos incluyen en el archivo de cabecera, pero sólo un módulo es su mami mentiras.

 

  

 

 

  

  

Supongo que te gusta

Origin www.cnblogs.com/zhuangquan/p/12625106.html
Recomendado
Clasificación