Включение файла заголовка из другого каталога
У меня есть основной каталог 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
то вам не нужно ничего делать в своей программе.