5 ,複雜指標的宣告
規則總結:
1) 去掉變數名就型別 , 去掉乙個 *, 就是指向記憶體單元的型別 .
2) 強調什麼將名子和強調的東東括最裡層 , 再將其次強調的東西括外面一層 , 最後強調的括最外層 , 型別最後加在外面 :
如 : int (*i)[2]; 指向 int ()[2] 的指標 ( 強調指標 )
int *(i[2]); 型別為 int *() 的陣列 ( 強調陣列 )
void (*pf)(); 指向 void ()() 的函式指標 .
void (*(pf[2]))(); 函式型別為 void ()() 的指標陣列 ( 最強調陣列 , 所以先括陣列 , 其次強調指標 , 所以將它括在外面一層 .
void (*((*pf)[2]))(); 指向上個函式指標陣列的指標 ,( 最強調指標 , 所以將變數明和指標括在最裡層 , 其次強調陣列 , 所以括在上一層 , 最後又強調指標 , 所以將其括在最外層 .)
6. 模擬 ucos 中的 task 切換和郵箱機制 (由於 ucos **比較複雜,自己實現了個模擬的,為了方便所以棧還是弄亂了!)
#define t(a,b) t##a() \ }
unsigned int ip=0;
char mb[2][3];
char*gm(int p)
sm(char*m,int p)
ms()
t(1,2)
t(2,1)
main()
7, 泛型巨集 (說明**提取自 linux 原始碼)
#define min(x, y) ()
C老鳥程式設計技巧總結 1
c 程式設計有所幫助。1,開發跨平台的一種結構體實現 說明 提取自 lcc編譯器原始碼 定義跨平台的結構體.typedef struct binding binding 可以先把每個平台的介面物件繫結好.binding binds 下面使用起來就很方便了 無論是從命令列取平台名子動態繫結還是用巨集來...
C老鳥程式設計技巧總結 1
1 開發跨平台的一種結構體實現 說明 提取自 lcc 編譯器原始碼 定義跨平台的結構體 typedef struct binding binding 可以先把每個平台的介面物件繫結好 binding binds 下面使用起來就很方便了 無論是從命令列取平台名子動態繫結還是用巨集來在編譯時繫結 如 動...
C 程式設計技巧學習 2
二,程式的格式 空行的使用 規則2 1 1 在每個類宣告之後 每個函式定義結束之後都要加空行。規則2 1 2 在乙個函式體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。單行的格式 單行的格式 規則2 2 1 一行 只做一件事情,如只定義乙個變數,或只寫一條語句。這樣的 容易閱讀,並且方...