公告版位
從小害怕寫作文, 文筆不佳到現在, 還請各位讀者大大:
1. 發現有錯誤, 請留言告知. (或者你 '覺得' 不對也行)
2. 用字措辭不當, 請留言告知.
3. 有看沒有懂? 幫到忙也好, 幫倒忙也罷, 總之留個言吧.

本文來自網站 ieng9.ucsd.edu (http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html) 加以重新排版.

呃… 它搬家了, 新網址如後: cseweb.ucsd.edu (http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html)

本文開始: (修訂二版)


The "right-left" rule is a completely regular rule for deciphering C declarations. It can also be useful in creating them.

文章標籤

MagicJackTing 發表在 痞客邦 留言(6) 人氣()

在系統在整合或移值時最常用的就是以巨集來置換一些底層 function. 這類的技巧叫 wrapper (意思是包裝紙)

但是在面對像 printf() 或者 scanf() 之類參數個數可變 (或稱不具名參數) 的函數, 就出現只能更換函數名稱, 而無法增減參數個數的冏境, 例如:

// 下例 OK, 但是無法處理參數的異動
#define printf              my_printf

// 下例 OK, 但是只能處理剛好二個參數的異動 (增加, 交換)
#define printf(a, b)        my_printf(x, b, a)

// 下例 ERR, C 編譯器的 preprocessor 不認識 ...
#define printf(a, b, ...)   my_printf(x, a, b, ...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(0) 人氣()

不具名的變動參數以 ... 代表之, 並且至少需要一個具名參數. 因此 ... 的前面至少要有一個參數, 超過一個的部份為此函數的固定參數. 下例為不具名變動參數的樣板.

#include <stdarg.h>

int my_function(int cnt, char* fmt, ...)
{
        int ret_value;
        va_list ap;                 // 宣告 變數 ap 型態為 va_list
        va_start(ap, fmt);          // ap 指向第一個變動參數
        ...
        x = va_arg(ap, int);        // 取得一個整數變數
        ...
        *va_arg(ap, long *) = y;    // 把一個長整數指標變數塞回去
        ...
        va_end(ap);                 // 釋放 變數 ap
        ...
        return ret_value;
}

int main(void)
{
        ...
        my_function(12, "abc", 6, 7, 8);
        ...
}

說明:

文章標籤

MagicJackTing 發表在 痞客邦 留言(0) 人氣()

Keil C51 特定功能


1. 如何產生 'RLC A' 指令: (Keil C51 適用)


CY = ACC & 0X80;

那 RRC A 呢? 還沒找到, 只能先用 {asm}

2. 如何把 C51 程式移值到別的 CPU 架構?


在 header file 中定義類似以下的 define, 同時程式中只能用這些定義 (也就是把程式中的 data, xdata... 先都改成 _DATA_, _XDATA_, ...). 因為別的 CPU 沒有這些 '記憶體空間修飾字'.

文章標籤

MagicJackTing 發表在 痞客邦 留言(3) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼