結構體前向申明用法,避免迴圈依賴

2021-09-11 15:01:58 字數 699 閱讀 9502

如果想引用別的標頭檔案中定義的結構體,而且又做到發布時不依賴其標頭檔案,就需要在你的標頭檔案中對這個結構體進行前向申明。而前向申明的方式也有一點考究。

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,是一種定義。...