標籤:style color 使用 strong io for 問題 cti
在網上看到很多嵌入式C的知識點,總想把他們積累起來。所謂不積小流無以成江海,不積跬步無以至千裡。
1、#define SENCONDS_PER_YEAR (60*60*24*365)UL
1)宏定義文法,格式
2)直觀表達出這個數位意義(一年又多少秒)
3)這個數字會使16位機產生溢出,需要使用長整形L,同時是無符號數,所以用到UL
2、#define MIN(A,B) ((A)<=(B)?(A)(B))
1)三重條件操作符,會使編譯器產生比if-than-else更最佳化的代碼 注意inline也是可以產生嵌入式代碼的
2)宏中的參數需要使用括弧括起來
3)leaset = MIN(*P++,a); 這個語句會產生什麼錯誤?
++ 的操作優先順序高於*,所以會先地址++,然後取值,會得到不確定的結果。
3、前置處理器表示 #error的目的是什麼
1)使用範圍很廣,在預先處理階段,當處理到這裡時,會產生預先處理錯誤,並輸出自訂錯誤。
# error [使用者自訂的錯誤訊息]
比如說,如果檢測到編譯環境是C++提醒使用者,需要在C編譯環境下運行。
4、死迴圈(Infinite loops)
自己習慣使用 while(1){},結構看起來一目瞭然。並且可以定義一個變數=1,變數名可以寫成某種死迴圈運行條件,這樣做可以一眼看出這個迴圈目的。
當然有些人喜歡 for(;;){},並沒有任何問題。
5、變數定義
a) 一個整型數 (An integer)
b) 一個指向整型數的指標 (A pointer to an integer)
c) 一個指向指標的的指標,它指向的指標是指向一個整型數 (A pointer to a pointer to an integer)
d) 一個有10個整型數的數組 (An array of 10 integers)
e) 一個有10個指標的數組,該指標是指向一個整型數的 (An array of 10 pointers to integers)
f) 一個指向有10個整型數數組的指標 (A pointer to an array of 10 integers)
g) 一個指向函數的指標,該函數有一個整型參數並返回一個整型數 (A pointer to a function that takes an integer as an argument and returns an integer)
h) 一個有10個指標的數組,該指標指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )
答案:
a) int_t a;
b) int_t *a;
c) int_t **a;
d) int_t a[10];
e) int_t *a[10];
f) int_t (*a)[10};
g) int_t (*a)(int_t);
h) int_t(*a[10])(int_t);
6、static 作用
1)static變數和函數儲存在靜態儲存地區,在程式開始時被初始化。唯一的一次初始化。靜態變數的值是可以變化的。地址是開始時初始化的。
2)靜態變數和靜態函數只能被模組內的函數調用,模組外的無法調用