c語言常用到的幾個冷知識
一,巨集定義中的特殊引數(#、##、...和__va_args__)
1,「#
」這個特殊的巨集定義引數也特別有用.#作為乙個預處理運算子,它可以把語言符號字串化(stringizing).例如我們定義的變數等.簡單的說就是把定義值變成字串,常用於列印;
#define stringint(x) #x
int test()
printf("test int is %s\n",stringint(2));
執行結果:test int is 2
2,##運算子可以用於類函式巨集的替換部分.##還可以用於類物件巨集的替換部分.這個運算子可以把兩個語言符號組合成單個語言符號
#define myname(n) "i am##n"
int test()
printf("test string: %s\n",
myname(gchen));
執行結果:test string:i an gchen
定義自動產生陣列
#define begin_map(name) \
static const int name## _entrys = \
,#define end_map(name) \
\}; \
3__va_args__引數部分 應該為 要替換為的部分的變數,只能代替後面的引數.
#define check1(x, ...) if (!(x))
#define check2(x, ...) if ((x))
#define check3(...)
#define macro(s, ...) printf(s, __va_args__)
int main()
錯誤的用法:
#define w(x,...,y)
C語言基礎冷知識彙總
和 的區別 表示按位取反,1變成0,0變成1。表示邏輯取反,false變ture,true變false,在c語言中,邏輯取反的物件只要不是0就表示為真。示例 5 0 5 二進位制00000101 取反11111010 6 表示按位取反,表示邏輯否定 所有的不是0的數用!操作後都是0 只有當運算元為0...
C語言偏冷知識點彙總
1 c語言函式宣告中引數型別寫在右括號後是什麼意思?如下 所示 int add a,b inta intb 像這樣的宣告是什麼意思,我測試過在gcc和vc 裡都能通過,但就是不明白是什麼意思,有什麼用處?有說明文件?答 古這是古老的寫法,稱為k r風格,與下面的形式一樣 int add int a,...
c語言常用的幾個函式
strcpy函式 2 如何給字串進行賦值 a 字串不能直接賦值 b 目前而言。給字串賦值的方法是通過strcpy函式 c strcpy函式需要string.h的標頭檔案的支援 d 在使用strcpy函式時不能把大串賦值給小串 格式 strcpy 字串1,字串2 相當於是字串1 字串2 strlen函...