1.
符號展開連線:
#definecat_token_1(t1, t2)t1##t2
#definecat_token(t1, t2)cat_token_1(t1,t2)
cat_token_1
直接將t1和t2
連線成t1t2
,而cat_token 將t1
和t2展開後再連線,如:
#definet1i_am_
#definet2lei_peng
cat_token_1(t1, t2)
的結果是
t1t2
cat_token(t1, t2)
的結果是
i_am_leipeng
cat_token
相當有用。2.將
0轉化為
0,而將非零轉化為
1,可以轉化指標
#define convert_bool(x) (!!(x))
3.編譯時斷言:
#define compile_assert(x)/
enum ;
// 或者
#define compile_assert_2(x)/
void cat_token(comp_assert_fun_,__line__)(int x[x]);
4.定義
handle
型別#definedefine_handle_type(handle_type)/
struct param_##handle_type;/
typedefvoid(*handle_type )(struct param_##handle_type);
將handle
定義為函式指標主要有乙個好處:就是禁止了對
handle
的加減,防止了一些小錯誤的發生。
5.定義
union
中的匿名
struct
structmy_type u1;
struct u2;
struct u3;
};};
C 語言的幾個層次
接到一位前不久c 培訓學員的來信,這位學員雖然以前功底欠缺,但學習勁頭很足,在培訓中成長很快。即便基本吃透 net框架 修訂版 還嫌不夠過癮,一心要成為高手中的高手。來信的目的是希望我來指點高階方向。說實話,我一般不想在這些有關個人發展的大是大非的問題上給人指導,因為太多親身或眼見的經歷告訴我人生實...
C 語言的幾個層次
接到一位前不久c 培訓學員的來信,這位學員雖然以前功底欠缺,但學習勁頭很足,在培訓中成長很快。即便基本吃透 net框架 修訂版 還嫌不夠過癮,一心要成為高手中的高手。來信的目的是希望我來指點高階方向。說實話,我一般不想在這些有關個人發展的大是大非的問題上給人指導,因為太多親身或眼見的經歷告訴我人生實...
C語言的幾個函式
一 strcat函式 在標準函式中,strcat函式是在檔案中宣告.strcat函式作用是指把第二個字串的所有元素追加到第乙個字串的尾部。string.h strcat宣告定義 extern char strcat char const char 在追加過程中,並不會檢測s所指的記憶體空間容量和內容...