stdio inclusion dans un fichier d'en-tête
Je ne suis pas totalement sûr mais ça a l'air mal:
J'ai un fichier d'en-tête nommée fraction.h dans lequel je stocke une fraction de la structure et les méthodes de traitement, une méthode est utilisée pour écrire une fraction dans un fichier, ainsi que la signature de cette fonction à un argument est une FICHIER pointeur.
fraction.h:
...
const Fraction * fraction_fwrite(const Fraction * f, FILE * file);
...
fraction.c:
#include <stdio.h>
#include "fraction.h"
...
Maintenant lorsque j'essaie de compiler un programme qui utilise une fraction, j'obtiens une erreur,
voici ce que j'ai dans mon Makefile:
program_test: fraction.o program_test.o
et je inclure fraction.h dans program_test.c de cours.
mais je reçois cette erreur :
fraction.h:34:54: error: unknown type name 'FICHIER'
quelqu'un pourrait expliquer les différentes étapes à travers lesquelles le compilateur inclut les fichiers ?
parce que <stdio.h>
est dans fraction.c alors, pourquoi ne le frapper, ce introuvables type d'erreur ?
dois-je inclure <stdio.h>
dans fraction.h ? ce qui ne semble pas vraiment approprié, de ma maigre expérience.
- Vous devez inclure
<stdio.h>
dans program_test.c ainsi.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous compilez
program_test
, le compilateur n'est pas en regardant les autres .c fichiers, seuls les fichiers que vous#include
dans le fichier compiler.Donc, soit vous avez de
#include <stdio.h>
dans le programme de test, tout comme dansfraction.c
, ou de l'inclure dans le fichier d'en-tête.Même si le C standard dit que la bibliothèque standard, les fichiers comprennent pas les uns les autres, il n'y a rien en disant que définis par l'utilisateur les fichiers ne peuvent pas le faire. En fait, il est généralement beaucoup plus facile à utiliser s'ils le font.
Lorsque le préprocesseur traite un fichier, il va copier le contenu d'un fichier inclus dans le fichier qui est analysée. La raison pour laquelle il n'y a pas d'erreur dans
fraction.c
est que le contenu destdio.h
est inclus avantfraction.h
est inclus.Donc la séquence fichier
fragments.c
ressemble à ceci:Avis que le
FILE
définition sera reprise parstdio.h
avant il est référencé dansfragment.h
.Vous devez inclure
stdio.h
dans la fraction.h à de se débarrasser de cette erreur.Inclure stdio.h en program_test.c. Si vous n'avez pas inclure stdio.h en program_test.c (ce qui inclut la fraction.h), le compilateur ne connait pas la définition de FICHIER utilisé par fraction.h, et génère l'erreur.
Et, vraiment, vous devez inclure stdio.h en fraction.h