J'ai Preprocessor.h
#define MAX_FILES 15
struct Preprocessor {
FILE fileVector[MAX_FILES];
int currentFile;
};
typedef struct Preprocessor Prepro;
void Prepro_init(Prepro* p) {
(*p).currentFile = 0;
}
J'ai alors réalisé que je devais séparer les déclarations des définitions. J'ai donc créé Preprocessor.c:
#define MAX_FILES 15
struct Preprocessor {
FILE fileVector[MAX_FILES];
int currentFile;
};
typedef struct Preprocessor Prepro;
Et Preprocessor.h est maintenant:
void Prepro_init(Prepro* p) {
(*p).currentFile = 0;
}
Cela ne fonctionne évidemment pas car Pr..h ne connaît pas le type Prepro. J'ai déjà essayé plusieurs combinaisons, aucune ne fonctionnait. Je ne trouve pas la solution.
Bouge le typedef struct Preprocessor Prepro;
à l'en-tête le fichier et la définition dans le fichier c avec la définition Prepro_init. Ceci vous le transmettra sans aucun problème.
Preprocessor.h
#ifndef _PREPROCESSOR_H_
#define _PREPROCESSOR_H_
#define MAX_FILES 15
typedef struct Preprocessor Prepro;
void Prepro_init(Prepro* p);
#endif
Preprocessor.c
#include "Preprocessor.h"
#include <stdio.h>
struct Preprocessor {
FILE fileVector[MAX_FILES];
int currentFile;
};
void Prepro_init(Prepro* p) {
(*p).currentFile = 0;
}
Si vous souhaitez masquer la définition de Preprocessor
, vous pouvez simplement le mettre dans le fichier d'en-tête:
struct Preprocessor;
typedef struct Preprocessor Prepro;
Mais plus généralement, vous aurez probablement également besoin de la définition Preprocessor
dans le fichier d'en-tête, pour permettre à d'autres codes de l'utiliser réellement.
Vous avez mis .c
ce qui devrait être dans .h
, et vice versa. Prepro_init
doit être dans .c
fichier, et ce fichier doit #include "Preprocessor.h"
.