Saltar al contenido

¿Cómo evitar múltiples definiciones en C?

Si encuentras algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Solución:

De hecho compilas el código fuente de test.c dos veces:

  • La primera vez al compilar test.c sí mismo,
  • La segunda vez al compilar main.c que incluye todos los test.c fuente.

Lo que necesitas en tu main.c para usar el test() función es una declaración simple, no su definición. Esto se logra al incluir un test.h archivo de encabezado que contiene algo como:

void test(void);

Esto informa al compilador que existe tal función con parámetros de entrada y tipo de retorno. Lo que hace esta función (todo dentro y ) queda en su test.c expediente.

En main.c, reemplace #include "test.c" por #include "test.h".

Un último punto: dado que sus programas son más complejos, se enfrentará a situaciones en las que los archivos de encabezado se pueden incluir varias veces. Para evitar esto, las fuentes de encabezado a veces se encierran en etiquetas específicas. macro definiciones, como:

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED

void test(void);

#endif

El guión bajo lo pone el compilador y lo usa el enlazador. La ruta básica es:

main.c
test.h ---> [compiler] ---> main.o --+
                                     |
test.c ---> [compiler] ---> test.o --+--> [linker] ---> main.exe

Por lo tanto, su programa principal debe incluir el archivo de encabezado para el módulo de prueba, que debe consistir solo en declaraciones, como el prototipo de función:

void test(void);

Esto le permite al compilador saber que existe cuando se está compilando main.c pero el código real está en test.c, luego en test.o.

Es la fase de vinculación que une los dos módulos.

Al incluir test.c en main.c, está definiendo la función test() en main.o. Presumiblemente, está vinculando main.o y test.o, los cuales contienen la función test().

No debe incluir otros archivos fuente (*.c) en archivos .c. Creo que quieres tener un encabezado (.h) archivo con la DECLARACIÓN de la función de prueba, y tenga su DEFINICIÓN en un archivo .c separado.

El error es causado por múltiples definiciones de la función de prueba (una en test.c y otra en main.c)

Te mostramos comentarios y puntuaciones

Nos puedes sustentar nuestra ocupación mostrando un comentario y puntuándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *