亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語(yǔ)言 百分網(wǎng)手機(jī)站

C語(yǔ)言中define的全部使用方法介紹

時(shí)間:2020-09-10 11:38:25 C語(yǔ)言 我要投稿

C語(yǔ)言中define的全部使用方法介紹

  設(shè)備驅(qū)動(dòng)代碼中有很多這樣或者那樣的宏定義,各種define,那么,你了解define的全部使用方法嗎?下面小編給大家介紹C語(yǔ)言中define的全部使用方法,歡迎閱讀!

  C語(yǔ)言中define的全部使用方法介紹

  1. 最最最簡(jiǎn)單的 define 定義

  不贅述了,說(shuō)一下其他的吧,如#define MAX 10,編譯器在處理這個(gè)代碼之前會(huì)對(duì)MAX進(jìn)行處理,替換為10,或許有些人認(rèn)為這樣的定義看起來(lái)和const常量很相似,但是他們還是有區(qū)別的,#define的定義其實(shí)就是簡(jiǎn)單的文本的`替換,并不是作為一個(gè)量來(lái)使用

  2. 用 #define 來(lái)對(duì)函數(shù)進(jìn)行“定義”

  很多就會(huì)問(wèn)了,什么?居然還能用#define來(lái)定義函數(shù),坑爹么?其實(shí)咋說(shuō)呢,就是類似的一個(gè)函數(shù)定義罷了,和真正的函數(shù)定義當(dāng)然還是有區(qū)別的了,下面進(jìn)行舉例說(shuō)明:

  還是用上面的MAX的例子:

  #define MAX(a,b) ((a) > (b) ? (a) : (b))

  這個(gè)定義就返回兩個(gè)數(shù)中較大的那個(gè),不知道你們看到了沒(méi)看到,這個(gè)”函數(shù)“沒(méi)有類型檢查,像不像函數(shù)模板?像?不像?

  其實(shí)是有點(diǎn)像的,可以作為一個(gè)普通的模板來(lái)使用罷了,他肯定沒(méi)函數(shù)模板那么安全,WHY?看下面的例子:

  #define MINUS(a,b) a – b,眨眼一看,這個(gè)肯定是減法操作的define,有木有?對(duì),沒(méi)錯(cuò),就是這個(gè)意思,這個(gè)定義在一般的使用中沒(méi)問(wèn)題,但是在特定的情況下使用會(huì)出現(xiàn)問(wèn)題,如果我們要這樣去使用 的話,展開(kāi)之后會(huì)是什么樣子呢?如:2 * MINUS(a,b) / 4,就像我前面所說(shuō)的那樣,宏其實(shí)就是一個(gè)簡(jiǎn)單的文本替換,所以展開(kāi)時(shí)候就變?yōu)?2 * a – b / 4,和我們想要的結(jié)果是不是不一樣?是不是錯(cuò) 了?有木有?那要如何解決這個(gè)問(wèn)題呢,很簡(jiǎn)單,給原定義加一個(gè)括號(hào)就OK了,也就是#define MINUS(a,b) (a – b)

  再說(shuō)一個(gè)經(jīng)常出現(xiàn)的一個(gè)錯(cuò)誤,看下面的例子:

  #define pin int *

  pin a,b;

  本意其實(shí)都想讓a和b成為int型指針,但是實(shí)際上卻變成了int *a,b;a是int型指針,b是int型變量,咋處理捏?這個(gè)時(shí)候typedef就出來(lái)了,它說(shuō)我可以滿 足define滿足不了的要求,所以改成

  typedef pin (int *)

  就OK了。

  TIP:我們?cè)趯?xiě)code的時(shí)候一定要養(yǎng)成一個(gè)良好的習(xí)慣和一個(gè)良好的代碼編寫(xiě)風(fēng)格,建議所有的層次都加上括號(hào)

  3. define 的單行定義,舉例說(shuō)明之,屬于少見(jiàn)用法

  #define A(x) ##x

  #define B(x) #@x

  #define C(x) #x

  如果我們假設(shè)x=1,那么A(1)就是1,B(1)就是‘1’,C(1)就是”1“

  4. define 的多行定義

  #define可以進(jìn)行多行定義,雖然看起來(lái)有點(diǎn)蛋疼,但是確實(shí)是一個(gè)灰常經(jīng)典而且在設(shè)備驅(qū)動(dòng)代碼中經(jīng)常要用到的一個(gè)方法,格式如下:

  #define MACRO(arg1,arg2) do {

  test1;

  test2;

  }while(0)

  TIP:在每一行的末尾要加上,切記!

  5. 定義宏和取消宏定義的方法

  定義一個(gè)宏使用#define,取消一個(gè)宏定義使用#undef

  6. 使用宏進(jìn)行條件編譯

  格式如下:#ifdef … (#else) … #endif

  如:

  #ifdef HELLO

  #define WORLD 1

  #else

  #define WORLD 0

  #endif

  7. 用define來(lái)處理頭文件被頭文件或者源文件包含的情況

  由于頭文件包含可以嵌套,那么c文件有可能包含多次同一個(gè)頭文件,就會(huì)出現(xiàn)重復(fù)定義的問(wèn)題的,那么可以就通過(guò)條件編譯開(kāi)關(guān)來(lái)避免重復(fù)包含,如下:

  #ifndef _HELLO_H_

  #define _HELLO_H_

  ...

  //文件內(nèi)容

  ...

  #endif


【C語(yǔ)言中define的全部使用方法介紹】相關(guān)文章:

C語(yǔ)言中define的使用方法10-01

C語(yǔ)言中volatile的使用方法11-22

C語(yǔ)言中const關(guān)鍵字的使用方法10-05

C語(yǔ)言的關(guān)鍵字define的使用10-01

C語(yǔ)言中的運(yùn)算規(guī)則10-08

C語(yǔ)言中的字符(char)10-07

C語(yǔ)言中的鏈接編寫(xiě)10-07

C語(yǔ)言中的assert用法10-07

c語(yǔ)言中default的用法10-05

c語(yǔ)言中free的用法10-04