如果想引用別的標頭檔案中定義的結構體,而且又做到發布時不依賴其標頭檔案,就需要在你的標頭檔案中對這個結構體進行前向申明。而前向申明的方式也有一點考究。
1.如果結構體定義如下:
typedef struct tag_test
test;
你在申明的時候就必須申明為:
typedef struct tag_test test;
2.如果結構體定義如下:
struct test
;
這樣申明就可以了:
struct test;
這裡要注意的是,前置宣告僅僅表示這個結構體型別在別的檔案中定義了,.**件中用到了這個結構體名,但他並不知道這個結構體的具體內容,因為標頭檔案中都是宣告,並不需要分配記憶體,所以並不需要知道結構體的具體內容,
但是如果在對應的.c檔案中使用這個前置宣告的結構體進行定義時,因為需要分配記憶體,必須知道該結構體的具體形式,所以,儘管前置宣告了該結構體名,但在.c中使用時,仍然需要在.c中將定義有該結構體的標頭檔案包含進來。
這樣做的意義是:當兩個檔案中互相用到對方的結構體定義時,如果在各自的標頭檔案包含,則會引起迴圈依賴的情況,在標頭檔案中前置宣告結構體,然後在.c檔案中包含對應標頭檔案,可以避免迴圈依賴的情況。
參考部落格:
python 向C介面傳遞結構體陣列 結構體
c原始碼 1.c include include include 1.h int add int a,int b if 0 int add stus student data,int count return 1 int add stu student data int add data stude...
typedef用法 結構體
結構體中typedef語句用法總結 typedef為c語言的關鍵字,作用是為一種資料型別 這裡僅討論結構體資料型別 定義乙個新名字。在程式設計中使用typedef目的一般有兩個 給變數乙個易記且意義明確的新名字 簡化一些比較複雜的型別宣告。1 typedef的最簡單使用 typedef int da...
結構體的用法
1 資料型別的定義 struct point 結構體是一種資料型別,故此處被宣告的結構體point,同int char一樣。2 結構體的定義 struct point struct point p1 struct point是資料型別,故struct point p1就相當於int a,是一種定義。...