メインディレクトリ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
に含める正しい方法は何ですか?
ヘッダーファイルを参照する場合は、相対 cファイルを参照する必要があります#include "path/to/header.h"
フォーム #include <someheader.h>
は、内部ヘッダーまたは明示的に追加されたディレクトリ(gccで-I
オプション)。
書きます
#include "../b/structure.h"
代わりに
#include <structures.h>
次に、cのディレクトリに移動して、main.cをコンパイルします。
gcc main.c
Makefileプロジェクトで作業する場合、または単にコマンドラインからコードを実行する場合は、
gcc -IC main.c
-I
オプションは、ヘッダーファイルを検索するディレクトリのリストにC
ディレクトリを追加するため、プロジェクトの#include "structures.h"
anywhereを使用できます。
コマンドライン引数を使用したい場合は、gcc -idirafter ../b/ main.c
その後、プログラム内で何もする必要はありません。