web-dev-qa-db-ja.com

別のディレクトリのヘッダーファイルを含める

メインディレクトリAと2つのサブディレクトリ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に含める正しい方法は何ですか?

37
Manny

ヘッダーファイルを参照する場合は、相対 cファイルを参照する必要があります#include "path/to/header.h"

フォーム #include <someheader.h>は、内部ヘッダーまたは明示的に追加されたディレクトリ(gccで-Iオプション)。

39
Constantinius

書きます

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

代わりに

#include <structures.h>

次に、cのディレクトリに移動して、main.cをコンパイルします。

gcc main.c
14
Jeegar Patel

Makefileプロジェクトで作業する場合、または単にコマンドラインからコードを実行する場合は、

gcc -IC main.c

-Iオプションは、ヘッダーファイルを検索するディレクトリのリストにCディレクトリを追加するため、プロジェクトの#include "structures.h"anywhereを使用できます。

2
Timandi Vlad

コマンドライン引数を使用したい場合は、gcc -idirafter ../b/ main.c

その後、プログラム内で何もする必要はありません。

1