¿Cómo puedo definir una función C en un archivo y luego llamarla desde otro?

Digamos que defino una función en el archivo func1.c , y quiero llamarlo desde el archivo call.c , ¿cómo lograría esto? ¡Gracias por adelantado!

func1.h una statement para la función en el archivo func1.h , y agregaría #include "func1.h" en call.c Luego comstackría o enlazaría func1.c y call.c juntos (los detalles dependen de qué sistema C).

Use una statement de avance

Por ejemplo:

 typedef struct { int SomeMemberValue; char* SomeOtherMemberValue; } SomeStruct; int SomeReferencedFunction(int someValue, SomeStruct someStructValue); int SomeFunction() { SomeStruct s; s.SomeMemberValue = 12; s.SomeOtherMemberValue = "test string"; return SomeReferencedFunction(5, s) > 12; } 

Existe una función que le permite reutilizar estas declaraciones de reenvío llamadas Archivos de encabezado . Simplemente tome las declaraciones de reenvío, colóquelas en el archivo de encabezado, luego use #include para agregarlas a cada archivo fuente C en el que haga referencia a las declaraciones de reenvío.

 /* SomeFunction.c */ #include "SomeReferencedFunction.h" int SomeFunction() { SomeStruct s; s.SomeMemberValue = 12; s.SomeOtherMemberValue = "test string"; return SomeReferencedFunction(5, s) > 12; } /* SomeReferencedFunction.h */ typedef SomeStruct { int SomeMemberValue; char* SomeOtherMemberValue; } SomeStruct; int SomeReferencedFunction(int someValue, SomeStruct someStructValue); /* SomeReferencedFunction.c */ /* Need to include SomeReferencedFunction.h, so we have the definition for SomeStruct */ #include "SomeReferencedFunction.h" int SomeReferencedFunction(int someValue, SomeStruct someStructValue) { if(someStructValue.SomeOtherMemberValue == NULL) return 0; return someValue * 12 + someStructValue.SomeMemberValue; } 

Por supuesto, para poder comstackr ambos archivos de origen y, por lo tanto, toda la biblioteca o progtwig ejecutable, deberá agregar la salida de ambos archivos .c a la línea de comandos del vinculador, o incluirlos en el mismo “proyecto” ( Dependiendo de su IDE / comstackdor).

Muchas personas sugieren que haga archivos de encabezado para todas sus declaraciones de reenvío, incluso si cree que no los necesitará. Cuando usted (u otras personas) van a modificar su código y cambian la firma de las funciones, les ahorrará tiempo al tener que modificar todos los lugares donde se declara la función hacia adelante. También puede ayudar a salvarlo de algunos errores sutiles, o al menos confusos compiler errors.