C之巨集定義

2021-10-12 03:19:14 字數 3556 閱讀 1789

__file__ __function__ __line__

__date__

__time__

#define max(x, y)   (((x) < (y)) ? (y) : (x))	

/*兩數取最大數*/

#define min(x, y) (((x) < (y)) ? (x) : (y))

/*兩數取最小數*/

#define ticks_subtract_absolute(cur, prev) (((cur) >= (prev)) ? ((cur)-(prev)) : ((0xffffffff-(prev))+(cur)+1))
//閏年的判斷 ,年份可以整除4並且不能整除100,或者可以整除400,則為閏年;

#define is_leap_year(y) (((((y) % 4) == 0) && (((y) % 100) != 0)) \

|| (((y) % 400) == 0))

/*判斷是否是閏年*/

#define bcd2hex(x) (((x) >> 4) * 10 + ((x) & 0x0f))       

/*bcd碼轉數值, 20h -> 20*/

#define hex2bcd(x) (((x) % 10) + ((((x) / 10) % 10) << 4))

/*數值轉bcd碼, 20 -> 20h*/

/*字元是否在某個區間範圍內*/

#define in_range(c, lo, up) ((uint8)c >= lo && (uint8)c <= up)

#define isprint(c) in_range(c, 0x20, 0x7f)

/*十進位制內字元*/

#define isdigit(c) in_range(c, '0', '9')

/*十六進製制內字元*/

#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'a', 'f'))

/*是否是小寫*/

#define islower(c) in_range(c, 'a', 'z')

/*是否是空格*/

#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v')

/*是否為ascii碼*/

#define isascii(c) ((unsigned) (c) <= 0177)

#define msb(x) (((x) >> 8) & 0xff) 

/* x佔2byte(如short)2byte的高位址的1byte */

#define lsb(x) ((x) & 0xff)

/* x佔2byte(如short)2byte的低位址的1byte*/

#define msw(x) (((x) >> 16) & 0xffff)

/* x佔4byte(如int) 4byte的高位址的2byte */

#define lsw(x) ((x) & 0xffff)

#define wordswap(x) (msw(x) | (lsw(x) << 16))

/* x佔4byte(如int) 低2位元組與高2位元組內容交換 */

#define llsb(x) ((x) & 0xff)

/*x佔4byte(如int) 取低位址1byte*/

#define lnlsb(x) (((x) >> 8) & 0xff)

#define lnmsb(x) (((x) >> 16) & 0xff)

#define lmsb(x) (((x) >> 24) & 0xff)

/*x佔4byte(如int) 4位元組逆序*/

#define longswap(x) ((llsb(x) << 24) \ |(

lnlsb

(x)<<

16) \

|(lnmsb

(x)<<

8) \

|(lmsb

(x))

)

/* 判斷某位是否為1 */

#define bit_is_1(x,y) (((x)>>(y))&0x01u)

#define setbits(x,y,n) (x) = (n) ? ((x)|(1 << (y))) : ((x) &(~(1 << (y))));

/* 給某位置反 */

#define bit_inverse(x,y) ((x)=(x)^(1<<(y)))

/* 位元組串中某bit值*/

#define bit_of_bytes(x, y) (bits(x[(y)/8], (y)%8))

/* 位元組串中設定某bit為0 */

#define setbitsto0_of_bytes(x, y) (x[(y)/8]) &= (~(1 << ((y)%8)))

/* 位元組串中設定某bit為1 */

#define setbitsto1_of_bytes(x, y) (x[(y)/8]) |= (1 << ((y)%8))

/* number of elements in an array */

#define array_size(a) (sizeof (a) / sizeof ((a)[0]))

/* byte offset of member in structure*/

#define moffset(structure, member) ((int) &(((structure *) 0) -> member))

/* size of a member of a structure */

#define member_size(structure, member) (sizeof (((structure *) 0) -> member))

/*向上對齊,~(align - 1)為對齊掩碼,例如align=8,~(align - 1) = ~7,

(~7)二進位制後三位為000,&(~(align - 1)) = &(~7),就是去掉餘數,使其能被8整除*/

#define align_up(x, align) (((int) (x) + (align - 1)) & ~(align - 1))

/*向下對齊*/

#define align_down(x, align) ((int)(x) & ~(align - 1))

/*是否對齊*/

#define aligned(x, align) (((int)(x) & (align - 1)) == 0)

C之帶參巨集定義

1.帶參巨集定義跟前面文章有所區別,不是簡單的數值或者字串替換,是要進行引數替換。2.本人理解,帶參巨集是很方便的,一些固定輸入和輸出咱們可以選擇帶參巨集,類似工程中多出要計算兩數相乘,這種情況我們就可以使用帶參巨集。define s a,b a b qdebug 2,3 6 define pi 3...

重讀C庫之巨集定義

1.如何編寫標頭檔案.h?1 23 ifndef func1 h func1 h 可小寫可大寫45 define func1 h func1 h67 8 9 endif 2.如何在c 檔案使用c庫?ifdef cpluscplus extern c endif 更複雜版本 3.undef作用?在後面...

C 巨集定義 巨集定義求面積

學過c語言的讀者,對巨集定義應該不陌生,同樣在c 中,也可以用巨集定義命令將乙個指定的識別符號來代表乙個字串,巨集定義的作用一般是用乙個短的名字代表乙個長的字串。一般形式為 define 識別符號 字串定義pi的符號常量 define pi 3.14在c 中還可以用 define命令定義帶引數的巨集...