Por alguna razón, recibo varias declaraciones de contenido dentro de mi archivo de encabezado aunque estoy usando guardias de encabezado. Mi código de ejemplo es el siguiente:Encabezado/Incluir guardias no funcionan?
main.c:
#include "thing.h"
int main(){
printf("%d", increment());
return 0;
}
thing.c:
#include "thing.h"
int increment(){
return something++;
}
thing.h:
#ifndef THING_H_
#define THING_H_
#include <stdio.h>
int something = 0;
int increment();
#endif
Cuando intento compilar este, GCC dice que tengo múltiples definiciones de algo variable. ifndef debería asegurarse de que esto no ocurra, por lo que estoy confundido por qué es así.
El * compilador * error "múltiples * declaraciones *" no es lo mismo que * linker * error "multiple * definitions *". Usted ha mencionado ambos en su pregunta (cuando de hecho el único problema es este último); entender la diferencia es clave para entender qué está yendo mal. Los protectores de encabezado evitan múltiples * declaraciones *, no múltiples * definiciones *. – Clifford
@Clifford lo siento, debería haber mencionado que estaba obteniendo un error de enlazador. – user1007968
Además, en C 'int increment();' no es un prototipo, pero declara una función con un número de parámetros no especificado. Use 'int increment (void);' para eso. –