2012-03-27 3 views
2

мой тестовый код ниже:как использовать-структуру, определенную в файле .c в другом файле

main1.c:

#include <stdio.h> 
extern struct tt ; 
int main() 
{ 
    struct tt y; 
    y.a=255; 
    y.b=0; 
    printf("tt->a=%#x ,tt->b=%#x \n",y.a,y.b); 
} 

main2.c:

#include<stdio.h> 

struct tt 
{ 
    int a; 
    int b; 
}; 

Makefile :

main: main1.o 
    gcc -o main main1.o 
main1.o: main2.c main1.c 

но компилятор сообщает:

cc -c -o main1.o main1.c 
main1.c:2: warning: useless storage class specifier in empty declaration 
main1.c: In function ‘main’: 
main1.c:5: error: storage size of ‘y’ isn’t known 
make: *** [main1.o] Error 1 

Как написать код в .c файле, используя структуру, определенную в другом .c файле ???

thx за вашу помощь!

+2

struct должен быть определен в .h файле – onemach

ответ

5

Необходимо указать struct в файле заголовка, который включает в себя как файлы .c. Например:

#ifndef __INCLUDE_GUARD_HERE__ 
#define __INCLUDE_GUARD_HERE__ 

struct tt { 
    int a; 
    int b; 
}; 

#endif 

Теперь оба .c файлы могут #include заголовочный файл.

+0

Есть ли способ не иметь определение внутри файла заголовка? Скажем, дизайн заставляет меня определять 'struct' внутри .c файла? Могу ли я каким-либо образом получить доступ к этой структуре из другого .c-файла? См. Http://stackoverflow.com/questions/23520877/forward-declaring-an-extern-struct – displayname

2

сообщение об ошибке очень четкое. (Ошибка: размер хранения «у» не известно)

вы объявляете переменную как имя «уу»

struct tt yy;

но вы используете другую переменную с именем «у» (Безразлично» t даже в этой области)

y.a=255;

см.? yy! = y

+0

Это моя ошибка, но это не проблема. – city

Смежные вопросы