Включение заголовочного файла из другого каталога - PullRequest
36 голосов
/ 28 сентября 2011

У меня есть главный каталог A с двумя подкаталогами B и C.

Каталог B содержит заголовочный файл structures.c:

#ifndef __STRUCTURES_H
#define __STRUCTURES_H
typedef struct __stud_ent__
{
    char name[20];
    int roll_num;
}stud;
#endif

Каталог C содержит main.c код:

#include<stdio.h>
#include<stdlib.h>
#include <structures.h>
int main()
{
    stud *value;
    value = malloc(sizeof(stud));
    free (value);
    printf("working \n");
    return 0;
}

Но я получаю сообщение об ошибке:

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)

Как правильно включить файл structures.h в main.c

Ответы [ 4 ]

38 голосов
/ 28 сентября 2011

При обращении к заголовочным файлам относительно к вашему c файлу вы должны использовать #include "path/to/header.h"

Форма #include <someheader.h> используется только для внутренних заголовков или для явно добавленных каталогов (в gcc с параметром -I).

14 голосов
/ 28 сентября 2011

записать

#include "../b/structure.h"

вместо

#include <structures.h>

, затем перейти в каталог в c и скомпилировать ваш main.c с

gcc main.c
2 голосов
/ 11 апреля 2017

Если вы работаете над проектом Makefile или просто запускаете свой код из командной строки, используйте

gcc -IC main.c

Параметр

, где -I добавляет каталог C в список каталогов для поиска файлов заголовков, поэтому вы сможете использовать #include "structures.h" в любом месте вашего проекта.

1 голос
/ 08 марта 2017

Если вы хотите использовать аргумент командной строки, вы можете указать gcc -idirafter ../b/ main.c

тогда вам не нужно ничего делать внутри вашей программы.

...