1 , 開發跨平台的一種結構體實現 (說明**提取自 lcc 編譯器原始碼)
// 定義跨平台的結構體 .
typedef struct binding binding;
// 可以先把每個平台的介面物件繫結好 .
binding binds;
// 下面使用起來就很方便了 , 無論是從命令列取平台名子動態繫結還是用巨集來在編譯時繫結 .
如 ( 動態繫結 ):for (j = 0; bindings[j].name && bindings[j].ir; j++)
// 根據 -target 引數的值來確定平台
if (strcmp(&argv[i][8], bindings[j].name) == 0)
2 ,巧用巨集來減少**量,使**更美觀 (說明**提取自 lcc 編譯器原始碼)
3 ,巧用聯合體 (說明**提取自 lcc 編譯器原始碼)
4 , 用通用結構體頭實現 c 的 oo 封裝 (說明**提取自 ruby 原始碼)
struct rbasic 的設計是為了包含由所有物件結構體共享的一些重要資訊的。struct rbasic 的定義如下:
struct rbasic
struct rbasic ;
flags 是個多目的的標記,大多用以記錄結構體型別 ( 比如, struct robject) 。型別標記命名為 t_***x ,可以使用巨集 type() 從 value 中獲得。這是乙個例子:
value str;
str = rb_str_new(); /* 建立 ruby 字串(其結構體是 rstring ) */
type(str); /* 返回值是 t_string */
這些 t_***x 標記的名字直接與其對應的型別名相關,如 t_string 表示 struct rstring 、 t_array 表示 struct rarray 。
struct rbasic 的另乙個成員, klass ,包含了這個物件歸屬的類。因為 klass 成員是 value 型別 , 它儲存的是(乙個指標指向)乙個 ruby 物件。簡言之,它是乙個類物件。
函式指標表和變數表實現成員函式和成員變數的封裝:
struct rclass ;
struct st_table
是乙個在ruby
中到處使用的 hash 表,但基本上,它就是乙個將名字對映為物件的表。在m_tbl
中,持有這個類所擁有方法的名稱(id
)與方法實體本身之間的對應關係。
C老鳥程式設計技巧總結 1
c 程式設計有所幫助。1,開發跨平台的一種結構體實現 說明 提取自 lcc編譯器原始碼 定義跨平台的結構體.typedef struct binding binding 可以先把每個平台的介面物件繫結好.binding binds 下面使用起來就很方便了 無論是從命令列取平台名子動態繫結還是用巨集來...
C老鳥程式設計技巧總結 2
5 複雜指標的宣告 規則總結 1 去掉變數名就型別 去掉乙個 就是指向記憶體單元的型別 2 強調什麼將名子和強調的東東括最裡層 再將其次強調的東西括外面一層 最後強調的括最外層 型別最後加在外面 如 int i 2 指向 int 2 的指標 強調指標 int i 2 型別為 int 的陣列 強調陣列...
C 技巧總結 1
1.usecontrol頁面在使用的時候,是沒有showdialog功能的。2.列表在潘頓是否為空的時候可以直接判斷列表元素的數量是否為零。3.foreach迴圈遍歷的時候,要模擬這個迴圈完整的執行過程,在不容易出錯,否則容易出現邏輯錯誤。4.在例項乙個物件時,要確認是否有值 在例項化後,也要確定是...