web-dev-qa-db-fra.com

Inclusion d'un fichier d'en-tête d'un autre répertoire

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?

37
Manny

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).

39
Constantinius

é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
14
Jeegar Patel

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.

2
Timandi Vlad

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.

1
Vishwajeet Vishu