tft每日頭條

 > 圖文

 > 常見編程範例的含義

常見編程範例的含義

圖文 更新时间:2024-07-23 18:25:06

類型定義語句,主要是結構體(類、聯合體)的定義。

它們都是以關鍵字struct / class / union開始的。

我在scf框架裡沒有支持作用域運算符::,所以結構體的定義都是全局的,不能在結構體裡定義其他結構體類型(但可以包含其他結構體變量)。

struct S0 {

struct S0* next;

struct Data {

int x;

int y;

} d;

};

像上面這樣的結構體定義,我覺得分析起來太麻煩了[捂臉]

我認為,還是把C 的S0::Data這個類型放到全局裡定義比較好。

struct S0_Data {

int x;

int y;

};

struct S0 {

struct S0* next;

S0_Data d;

};

如果是union的話,我倒是在scf框架裡支持了結構體裡的匿名聯合體。

我設計的結構體裡是可以添加成員函數的,這點類似C 。

結構體的語法分析并不複雜,它是以struct關鍵字加上結構體名字,再加上{}擴起來的順序塊構成的,最後以分号結尾。

我沒有支持這樣的結構體定義:struct S { int x; int y; } s0;

我的打算是類型定義變量聲明盡量分開(union除外)。

之所以對union做了跟C語言一樣的處理,是不想讓下面的代碼也要單獨定義一個全局的union類型

struct S {

struct S* next;

union {

int i;

float f;

double d;

void* p;

};

};

常見編程範例的含義(技術文章類型定義語句)1

init_module()函數

類型定義模塊的節點有6個:

1,class或struct關鍵字,

這兩個在scf框架裡沒有區别,因為我沒有支持public / private的權限控制。

2,類名的标志符,它是個字母或下劃線開頭的字符串。

3,左中括号,表示類成員(變量或函數)的定義開始

4,右中括号,表示類成員(變量或函數)的定義結束

5,分号,表示定義結束。

6,end,類定義結束之後要運行的代碼,例如計算所占的字節數

常見編程範例的含義(技術文章類型定義語句)2

語法編輯

語法的編輯也很簡單,隻要把這些節點按照跟源代碼一樣的順序連接起來就行。

除了union類型的成員變量之外,其他成員變量都是以類型名字開始的,所以引用了類型模塊type的入口節點。

說說怎麼計算結構體的字節數

常見編程範例的含義(技術文章類型定義語句)3

計算結構體的大小

CPU讀寫内存時要盡量對齊

1,如果變量是1個字節可以從任何地址開始,

2,變量是2字節就從能被2整除的地址開始,

3,變量是4字節就從被4整除的地址開始,

4,再大的變量就從被8整除的地址開始。

如果變量的字節數不足,就對齊到最近的2的幂

例如,3字節的變量也是以4對齊的,5字節的也是以8對齊的。

對齊之後就是變量在結構體裡的偏移量,然後加上變量的大小就可以計算出結構體的大小。

具體的語法分析函數,見下面的幾張圖,已加注釋。

常見編程範例的含義(技術文章類型定義語句)4

常見編程範例的含義(技術文章類型定義語句)5

常見編程範例的含義(技術文章類型定義語句)6

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved