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 lostest.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.