Si je définis une fonction dans le fichier func1.c
et je veux l'appeler à partir du fichier call.c
. Comment puis-je accomplir cette tâche ?
Réponses
Trop de publicités?Utilisez un Déclaration prospective
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 string";
return SomeReferencedFunction(5, s) > 12;
}
Il existe une fonctionnalité qui vous permet de réutiliser ces déclarations prospectives, appelée Fichiers d'en-tête . Il suffit de prendre les déclarations en avant, de les placer dans le fichier d'en-tête, puis d'utiliser #include
pour les ajouter à chaque fichier source C dans lequel vous faites référence aux déclarations forward.
/* 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;
}
Bien entendu, pour pouvoir compiler les deux fichiers sources, et donc la bibliothèque ou le programme exécutable dans son ensemble, vous devrez ajouter la sortie des deux fichiers .c à la ligne de commande de l'éditeur de liens, ou les inclure dans le même "projet" (selon votre IDE/compilateur).
De nombreuses personnes suggèrent de créer des fichiers d'en-tête pour toutes vos déclarations de forward, même si vous ne pensez pas en avoir besoin. Lorsque vous (ou d'autres personnes) modifierez votre code et changerez la signature des fonctions, vous gagnerez du temps en n'ayant pas à modifier tous les endroits où la fonction est déclarée à l'avance. Cela peut également vous éviter des bogues subtils, ou du moins des erreurs de compilation déroutantes.