uEFI 的巨集 _CR( )

 之前有了解到 _CR 是用來指到 資料結構的頂端(Header) , 但是實際上並沒有親自試過一次整段


今天在 online-c 的環境在做這個實驗,得到幾個重點

首先先貼出_CR

#define _CR(Record, TYPE, Field)  ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))

先看最後回傳值是一個 (TYPE*) , 這表示傳回來的是一個位置

再來Record是指目前指向的資料, 是結構的某處
假如一個結構元素叫 struct1 , struct1.name 就是這個Record指到的元素 , Record 是個指標 , 不是元素,這點要注意 (之前被困住太久) 


TYPE 就是資料結構的型態 , 像是int , float 類似的概念 , 不是元素 , 算是宣告的型態 , 應該會是某個 struct

Field 就是該資料結構型態下的某個元素

以下舉個例子

typedef stuct{
  int      year;
  char* name;
}hello;

void main(void)
{
   hello data = { 1988, "edward"};
 }

那 Record 就是 &(data.name)
TYPE 就是 hello
Field 就是 name

記住, Record 所指向的元素, 必須對應到 Field , 不然會算錯位置













留言

這個網誌中的熱門文章

如何在VS2022 Community 簡要的設定UDK2018的環境

自製讀取 H 檔案並找出 define 的程式

GUI實作 - Lesson 2 - 顯示BMP圖檔