Comment définir une fonction C dans un fichier, puis l’appeler depuis un autre?

Supposons que je définis une fonction dans le fichier func1.c et que je veuille l’appeler à partir du fichier call.c , comment pourrais-je accomplir cela? Merci d’avance!

Vous devez placer une déclaration pour la fonction dans le fichier func1.h et append #include "func1.h" dans call.c Ensuite, vous comstackrez ou func1.c et call.c ensemble (les détails dépendent du système C).

Utiliser une déclaration à terme

Par exemple:

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

Il existe une fonctionnalité qui vous permet de réutiliser ces déclarations préalables appelées fichiers d’en-tête . Prenez simplement les déclarations de transfert, placez-les dans le fichier d’en-tête, puis utilisez #include pour les append à chaque fichier source C dans lequel vous faites référence aux déclarations de transfert.

 /* SomeFunction.c */ #include "SomeReferencedFunction.h" int SomeFunction() { SomeStruct s; s.SomeMemberValue = 12; s.SomeOtherMemberValue = "test ssortingng"; 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; } 

Bien sûr, pour pouvoir comstackr les deux fichiers source, et donc la bibliothèque entière ou le programme exécutable, vous devez append le résultat des deux fichiers .c à la ligne de commande de l’éditeur de liens, ou les inclure dans le même “projet” ( en fonction de votre IDE / compilateur).

De nombreuses personnes suggèrent de créer des fichiers d’en-tête pour toutes vos déclarations, même si vous pensez ne pas en avoir besoin. Lorsque vous (ou d’autres personnes) allez modifier votre code et modifiez la signature des fonctions, cela leur fera gagner du temps, sans avoir à modifier tous les emplacements où la fonction est déclarée en aval. Cela peut également vous aider à vous protéger de certains bugs subtils, ou du moins à confondre les erreurs du compilateur.