Linux中的C語言妙用(轉)

post0發表於2007-08-24
Linux中的C語言妙用(轉)[@more@]

  1.兩個數比較大小

  #define min( x,y) ({

  typeof( x) _x = ( x);

  typeof( y) _y = ( y);

  (void) (&_x == &_y); //妙用!作用是檢查引數 x 和 y 的型別是否相同

  _x < _y ? _x : _y; })

  2.連結串列的使用

  這個不多說了,太棒了,可以由一個連結串列成員獲取宿主的指標

  3.do{}while(0)的使用

  #define func(x) do{...;}while(0)

  4.結構體中的#define

  struct sock {

  struct sock_common __sk_common;

  #define sk_family __sk_common.skc_family

  #define sk_state __sk_common.skc_state

  .....

  };

  5.使用C寫出的物件導向程式,透過給結構體中的成員賦予不同的函式指標而實現不同的功能,取代了大量的case語句

  6.透過條件宏定義,同一函式名有不同的實現,方便呼叫此函式

  #ifdef xxx

  #define func(x) do{實現;}while(0)

  #else

  #define func(x) do{}while(0)

  7.零長度陣列

  GNU C 允許使用零長度陣列,在定義變長物件的頭結構時,這個特性非常有用。例

  如:

  struct minix_dir_entry {

  __u16 inode;

  char name[0];

  };

  8.可變引數宏

  在 GNU C 中,宏可以接受可變數目的引數,就象函式一樣,例如:

  #define pr_debug(fmt,arg...)

  printk(KERN_DEBUG fmt,##arg

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-965604/,如需轉載,請註明出處,否則將追究法律責任。

相關文章