J'ai un répertoire principal A
avec deux sous-répertoires B
et C
.
Le répertoire B
contient un fichier d'en-tête structures.c
:
#ifndef __STRUCTURES_H
#define __STRUCTURES_H
typedef struct __stud_ent__
{
char name[20];
int roll_num;
}stud;
#endif
Le répertoire C
contient main.c
code:
#include<stdio.h>
#include<stdlib.h>
#include <structures.h>
int main()
{
stud *value;
value = malloc(sizeof(stud));
free (value);
printf("working \n");
return 0;
}
Mais je reçois une erreur:
main.c:3:24: error: structures.h: No such file or directory
main.c: In function ‘main’:
main.c:6: error: ‘stud’ undeclared (first use in this function)
main.c:6: error: (Each undeclared identifier is reported only once
main.c:6: error: for each function it appears in.)
main.c:6: error: ‘value’ undeclared (first use in this function)
Quelle est la bonne façon d'inclure le structures.h
fichier dans main.c
?
Lorsque vous faites référence à des fichiers d'en-tête relatif à votre fichier c, vous devez utiliser #include "path/to/header.h"
La forme #include <someheader.h>
n'est utilisé que pour les en-têtes internes ou pour les répertoires ajoutés explicitement (dans gcc avec le -I
option).
écrire
#include "../b/structure.h"
au lieu de
#include <structures.h>
puis allez dans le répertoire c et compilez votre main.c avec
gcc main.c
Si vous travaillez sur un projet Makefile ou exécutez simplement votre code à partir de la ligne de commande, utilisez
gcc -IC main.c
où l'option -I
ajoute votre répertoire C
à la liste des répertoires à rechercher pour les fichiers d'en-tête, afin que vous puissiez utiliser #include "structures.h"
n'importe où dans votre projet.
Si vous souhaitez utiliser l'argument de ligne de commande, vous pouvez donner gcc -idirafter ../b/ main.c
alors vous n'avez rien à faire dans votre programme.