2012-03-27 72 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

結構應該在.h文件中定義 – onemach 2012-03-27 02:06:43

回答

5

您需要在.c文件包含的頭文件中定義struct。例如:

#ifndef __INCLUDE_GUARD_HERE__ 
#define __INCLUDE_GUARD_HERE__ 

struct tt { 
    int a; 
    int b; 
}; 

#endif 

現在兩個.c文件可以#include頭文件。

+0

有沒有辦法在頭文件中定義定義?假設設計強制我在.c文件中定義'struct'?我可以以某種方式從另一個.c文件訪問這個結構嗎?請參閱:http://stackoverflow.com/questions/23520877/forward-declaring-an-extern-struct – displayname 2014-05-07 15:19:58

2

錯誤信息非常明確。 (錯誤:的「Y」存儲大小是不知道)

聲明變量的名稱「YY」

struct tt yy;

但是你用另一個變量名稱爲「Y」(它不」 t甚至存在於此範圍內)

y.a=255;

看到了嗎? yy!= y

+0

這是我的錯誤,但它不是問題。 – city 2012-03-28 00:45:28