C語言中常用巨集定義

2022-05-13 15:09:07 字數 1358 閱讀 8093

下面是一些比較重要的巨集定義,記錄一下:

assert斷言:

#define assert(cond) ((cond)?(void)0:_assert(#cond,__file__,__line__))

void _assert(char*cond,char*filename,long lineno)

獲得結構體中域的偏移量

#define offsetof(type,field) ((int)((char*)&(((type*)0)->f)-(char*)(type*)0))

#define offsetof(type,field) ((int)&(((type*)0)->f)

大小寫轉換

#define toupper(ch) ((ch)+'a'-'a')

#define tolower(ch) ((ch)+'a'-'a')

三個數中求最大

#define max(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c)))

#define max(a,b,c) ((a)>((b)>(c)?(b):(c))?(a):((b)>(c)?(b):(c)))

位設定

#define set(n,i) ((n)|(1u<

#define reset(n,i) ((n)&~(1u<

#define toggle(n,i) ((n)^(1u<

#define test(n,i) !!((n)&(1u<

迴圈移位

#define rotl(val,n) (((val)<>(sizeof(val)*8-n)))

#define rotr(val,n) (((val)>>n)|((val)<<(sizeof(val)*8-n)))

異或(xor)邏輯運算

#define xor(a,b) (((a)||(b))&&!((a)&&(b)))

巨集實現swap交換

#define swap(x,y) ((x)==(y)?null:((x)^=(y),(y)^=(x),(x)^=(y))) 

#define swap_(x,y) (temp=x,x=y,y=temp)//在使用前定義乙個和x,y同型別的tmp臨時變數

20個C語言中常用巨集定義總結

20個c語言中常用巨集定義總結 2012 09 16 10 52 57 分享 01 防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 02 重新定義一些型別 防止由於各種平台和編譯器的不同,而產生的型別位元組數差異,方便移植。typ...

c 語言中的巨集定義

巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...

C語言中的巨集定義

下列c 中包含兩種巨集定義,例如 include define max connection 1000 define mng port 5000 define min a,b a b a b define max a,b a b a b int main 方法1 gcc e 引數預編譯 gcc e ...