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.