《C語言 - define的用法》


一、宏的定義與撤銷

需要注意的是:

(1)宏定義應注意添加括號,這樣語義會比較清晰。

(2)使用#undef可以撤銷宏定義。

(3)引號中的宏定義不會被替換。

(4)宏定義的宏名必須是合法的標識符。

(5)宏定義中單、雙引號必須成對出現。

 

二、帶有參數的宏定義

需要注意的是:

(1)宏調用時參數的個數要與定義時相同。

 

三、跨行的宏定義,使用反斜杠  分隔

 

 

四、三個特殊符號:#,##,#@

 

 

五、常見的宏定義

 1、防止頭文件被重復包含

 

 

 2、得到指定地址上的一個字節值或字值

 

 

3、得到一個field在結構體(struct)中的偏移量

#define OFFSETOF( type, field ) ( (size_t) &(( type *) 0)-> field )

 

4、得到一個結構體中field所占用的字節數 

#define FSIZ( type, field ) sizeof( ((type *) 0)->field )

 

5、得到一個變量的地址(word寬度)

#define B_PTR(var) ( (byte *) (void *) &(var) ) 
#define W_PTR(var) ( (word *) (void *) &(var) )

 

6、將一個字母轉換為大寫

#define UPCASE(c) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

 

7、判斷字符是不是10進制的數字

#define DECCHK(c) ((c) >= '0' && (c) <= '9')

 

8、判斷字符是不是16進的數字

#define HEXCHK(c) (((c) >= '0' && (c) <= '9') ||((c) >= 'A' && (c) <= 'F') ||((c) >= 'a' && (c) <= 'f'))

 

9、防止溢出的一個方法

#define INC_SAT(val) (val = ((val)+1 > (val)) ? (val)+1 : (val))

 

10、返回數組元素的個數 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM