Включение файла заголовка из другого каталога

У меня есть основной каталог 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?

Ответ 1

Когда вы ссылаетесь на файлы заголовков относительно вашего c файла, вы должны использовать #include "path/to/header.h"

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

Ответ 2

записывать

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

на месте

#include <structures.h>

затем перейдите в каталог c & compile your main.c с помощью

gcc main.c

Ответ 3

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

gcc -IC main.c

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

Ответ 4

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

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