2017-01-04 1 views
0

j'ai plusieurs fichiers d'en-tête dans une bibliothèque: header1.h, header2.h ... J'ai aussi un fichier d'en-tête général pour la bibliothèque: mylib.hComment faire une fonction visible à travers un fichier d'en-tête en C

Je veux que le utilisateur pour importer le fichier main.h et avoir accès à seulement certaines des fonctions dans les autres fichiers d'en-tête.

Par exemple, dans la bibliothèque:

// header1.h 
void a(void); 
void b(void); 

-

// mylib.h 

// I can't use this: 
#include "header1.h" 
// because it would make b function visible. 

// Link to function a ???????? 

Et dans mon programme principal:

// main.c 
#include "mylib.h" 

int main(void) { 

    a(); // Visible: no problem 
    b(); // Not visible: error 

    return 0; 
} 

Répondre

2

prototypes fonctionnels séparés en-têtes différents, selon qu'ils devrait être "visible" * 1 ou non (mais être "interne").

  • header1_internal.h
  • header1.h
  • header2_internal.h
  • header2.h
  • ...

Inclure dans les en-têtes *_internal.h l'en-tête *.h liés.

Incluez les en-têtes *_internal.h dans les modules associés de votre bibliothèque.

N'incluez aucun *_internal.h dans mylib.h.


* 1: S'il vous plaît noter que même lorsqu'ils ne sont pas fournir un prototype de cette façon, l'utilisateur peut très bien concevoir son/son propre prototype, puis relier la fonction de mylib. Les fonctions non prototypées ne sont donc pas inaccessibles.

+0

J'espérais éviter d'avoir autant de fichiers d'en-tête mais je pense que c'est la seule solution que nous pouvons trouver en C. Merci. – Octan

+1

@Octan: Vous êtes les bienvenus. S'il vous plaît voir ma note de bas de page supplémentaire. – alk

0

Si vous n'avez pas besoin de void b(void) dans un autre fichier d'en-tête et que vous avez accès au fichier source, qu'en est-il de la déclaration dans le fichier source?

// header1.h 
void a(void); 
//void b(void); 

// header1.c 
/* some #include here */ 
void b(void); 
/* other code here */ 
void b(void) { 
    /* implement it */ 
} 
0

Les fichiers d'en-tête ne contiennent que des fonctions qui devraient être accessibles par l'utilisateur de l'en-tête. Ils représentent l'interface publique.

Regardez ce premier: Organizing code into multiple files 1 lien YouTube: Organizing code into multiple files 1

Organizing code into multiple files 2 lien youTube: Organizing code into multiple files 2

vous pouvez plus consulter Introduction To GCC by Brian Gough pour obtenir plus d'idées dans la compilation et le processus liant l'aide gcc.

+0

Les vidéos mentionnées ci-dessus contiennent tout ce que vous devez savoir pour utiliser les fichiers d'en-tête avec succès. –