2011-09-28 11 views
24

메인 디렉토리 A에는 두 개의 하위 디렉토리 BC이 있습니다.다른 디렉토리의 헤더 파일 포함하기

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

디렉토리 Cmain.c 코드가 포함되어 있습니다 :

디렉토리 B는 헤더 파일 structures.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) 

올바른 방법이 무엇을 inc 파일 structures.hmain.c에 삽입 하시겠습니까?

+1

사용중인 컴파일러는 무엇입니까? gcc에 대해서는 -I 플래그 (매뉴얼 페이지 참조)를 살펴 봐야한다. 다른 컴파일러의 경우 설명서를 확인하십시오. –

답변

26

하여 main.c를 컴파일

#include <structures.h> 

대신에

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

쓰기 상대 c 파일에를 사용해야합니다.

양식 #include <someheader.h>은 내부 헤더 또는 명시 적으로 추가 된 디렉토리 (gcc에서 -I 옵션 사용)에만 사용됩니다. 명령 줄 인수를 사용하려면

+1

이것은 이론 상으로는 플랫폼/컴파일러마다 다릅니다. "명명 된 소스 파일은 구현 정의 방식으로 검색됩니다." ('#include "파일의 ISO/IEC 9899") –

11

는 C &에서 디렉토리에 저장 헤더 파일을 참조하면

gcc main.c 
1

당신은 gcc -idirafter ../b/ main.c

는 다음 프로그램 내부의 일을 할 필요가 없습니다 제공 할 수 있습니다. 당신이 메이크 프로젝트를 수행하거나 명령 줄에서 코드를 실행하면

1

사용 -I 옵션은 디렉토리의 목록에 C 디렉토리를 추가

gcc -IC main.c

때문에, 헤더 파일을 검색 할 프로젝트의 어느 곳에서나 #include "structures.h"을 사용할 수 있습니다.