2011-09-28 17 views
24

Mam główny katalog A z dwoma podkatalogami B i C.W tym plik nagłówkowy z innego katalogu

katalog B zawiera plik nagłówka structures.c:

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

katalog C zawiera kod 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; 
} 

ale pojawia się błąd:

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) 

Co to jest poprawny sposób do inc lude plik structures.h do main.c?

+1

Jaki jest używany kompilator? W przypadku gcc powinieneś rzucić okiem na flagę -I (patrz strona podręcznika). W przypadku innych kompilatorów zapoznaj się z dokumentacją. –

Odpowiedz

26

Po przedstawieniu do nagłówka plików względna do pliku c powinieneś użyć #include "path/to/header.h"

Formularz jest używany tylko do wewnętrznych nagłówków lub jawnie dodanych katalogów (w gcc z opcją -I).

+1

Należy pamiętać, że jest to - teoretycznie - specyficzne dla platformy/kompilatora. "Nazwany plik źródłowy jest wyszukiwany w sposób określony przez implementację." (ISO/IEC 9899 w pliku "#include" "") –

11

napisać

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

zamiast

#include <structures.h> 

następnie przejść w katalogu w C & skompilować main.c z

gcc main.c 
1

Jeśli chcesz użyć argumentu wiersza poleceń, to możesz dać gcc -idirafter ../b/ main.c

wtedy nie trzeba robić niczego wewnątrz programu.

1

Jeśli pracujesz nad projektem Makefile lub po prostu uruchomić kod z wiersza poleceń, należy

gcc -IC main.c

gdzie -I opcja dodaje katalog C do listy katalogów do przeszukania plików nagłówkowych, więc będziesz mógł używać #include "structures.h" w dowolnym miejscu swojego projektu.

Powiązane problemy