a级毛片免费全部播放-a级毛片免费观看在线播放-a级毛片免费观看网站-a级毛片免费看-国产成人精品在视频-国产成人精品在线

歡迎來到培訓無憂網!

全國切換

咨詢熱線 400-001-5729

位置:培訓無憂網 > 新聞資訊 > 電腦/IT > c語言 >  C語言學習之define的定義

C語言學習之define的定義

來源:培訓無憂網-云朵 發布人:云朵

2021-11-25 11:19:18|已瀏覽:204次

C語言學習之define的定義

    學習了這么多年C語言,說實話對宏自以為了如指掌了,沒想到看內核代碼的時候還是那么吃力,設備驅動代碼中有很多這樣或者那樣的宏定義,各種define,博主在學習的過程中將C語言中所出現的#define定義整理總結了一下,供大家借鑒和學習。
    原來以為什么是宏?無非就是定義一個替換的量,好比#define PI 3.1415926,這樣的功能,再深一點就是寫一個類似函數的定義,好比#define MAX(a,b) ((a) > (b) ? (a) : (b))這樣的功能,再問一下宏是什么?無非就是預處理階段所要展開的亂七八糟的東西,其實也就知道這么點,當看了Linux Kernel Code,其實會發現自己懂得那些其實都是皮毛,不值一提的小東西,才發現自己OUT了,為此博主將#define的使用方法總結了一下,如下所示:(如有不足請批評指正)
1. 最最最簡單的 define 定義
    不贅述了,說一下其他的吧,如#define MAX 10,編譯器在處理這個代碼之前會對MAX進行處理,替換為10,或許有些人認為這樣的定義看起來和const常量很相似,但是他們還是有區別的,#define的定義其實就是簡單的文本的替換,并不是作為一個量來使用
2. 用 #define 來對函數進行“定義”
    很多就會問了,什么?居然還能用#define來定義函數,坑爹么?其實咋說呢,就是類似的一個函數定義罷了,和真正的函數定義當然還是有區別的了,下面進行舉例說明:
    還是用上面的MAX的例子:
#define MAX(a,b) ((a) > (b) ? (a) : (b))
    這個定義就返回兩個數中較大的那個,不知道你們看到了沒看到,這個”函數“沒有類型檢查,像不像函數模板?像?不像?
    其實是有點像的,可以作為一個普通的模板來使用罷了,他肯定沒函數模板那么安全,WHY?看下面的例子:
    #define MINUS(a,b) a – b,眨眼一看,這個肯定是減法操作的define,有木有?對,沒錯,就是這個意思,這個定義在一般的使用中沒問題,但是在特定的情況下使用會出現問題,如果我們要這樣去使用 的話,展開之后會是什么樣子呢?如:2 * MINUS(a,b) / 4,就像我前面所說的那樣,宏其實就是一個簡單的文本替換,所以展開時候就變為 2 * a – b / 4,和我們想要的結果是不是不一樣?是不是錯 了?有木有?那要如何解決這個問題呢,很簡單,給原定義加一個括號就OK了,也就是#define MINUS(a,b) (a – b)
    再說一個經常出現的一個錯誤,看下面的例子:
#define pin int *
pina,b;
    本意其實都想讓a和b成為int型指針,但是實際上卻變成了int *a,b;a是int型指針,b是int型變量,咋處理捏?這個時候typedef就出來了,它說我可以滿 足define滿足不了的要求,所以改成typedef pin (int *)就OK了。
    TIP:我們在寫code的時候一定要養成一個良好的習慣和一個良好的代碼編寫風格,建議所有的層次都加上括號
3. define 的單行定義,舉例說明之,屬于少見用法
    #define A(x) ##x
    #define B(x) #@x
    #define C(x) #x
    如果我們假設x=1,那么A(1)就是1,B(1)就是‘1’,C(1)就是”1“
4. define 的多行定義
    #define可以進行多行定義,雖然看起來有點蛋疼,但是確實是一個灰常經典而且在設備驅動代碼中經常要用到的一個方法,格式如下:
    #define MACRO(arg1,arg2) do {
    test1;
    test2;
    }while(0)
TIP:在每一行的末尾要加上,切記!
5. 定義宏和取消宏定義的方法
    定義一個宏使用#define,取消一個宏定義使用#undef
6. 使用宏進行條件編譯
    格式如下:#ifdef … (#else) … #endif
如:
    #ifdef HELLO
    #define WORLD 1
    #else
    #define WORLD 0
    #endif
7. 用define來處理頭文件被頭文件或者源文件包含的情況
    由于頭文件包含可以嵌套,那么c文件有可能包含多次同一個頭文件,就會出現重復定義的問題的,那么可以就通過條件編譯開關來避免重復包含,如下:
    #ifndef _HELLO_H_
    #define _HELLO_H_
    ...
    //文件內容
    ...
    #endif

    本文由培訓無憂網達內教育課程顧問老師整理發布,更多課程信息可關注C語言培訓或添加老師微信:15033336050

      注:尊重原創文章,轉載請注明出處和鏈接 http://m.dedgn.cn/news-id-4847.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注c語言頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會一對一幫助你規劃更適合你的專業課程!
  • 姓名:

  • 手機:

  • 地區:

  • 想學什么:

  • 培訓無憂網
免 費 申 請 試 聽
提交申請,《培訓無憂網》課程顧問老師會一對一幫助你規劃更適合你的專業課程!

主站蜘蛛池模板: 男女男精品视频免费观看 | 中文字幕99在线精品视频免费看 | 91av小视频| 欧美成人精品一级高清片 | 欧美在线综合视频 | 夜夜爱夜夜爽夜夜做夜夜欢 | 国产成人久久精品激情91 | 午夜性刺激免费视频观看不卡专区 | 成人免费观看网欧美片 | 欧美成人鲁丝片在线观看 | 美女把张开腿男生猛戳免费视频 | 狠狠做久久深爱婷婷97动漫 | 日韩av线上 | 色伊人国产高清在线 | 寡妇一级a毛片免费播放 | 九九九九在线精品免费视频 | 日本黄页网站在线观看 | 亚洲成人在线视频 | 看a网址| 99国产小视频 | 日韩一级a毛片欧美区 | 亚洲视频在线观看网址 | 又黄又骚| 久久免费视频播放 | 日本人一级毛片免费视频 | 在线播放免费一级毛片欧美 | 亚洲自偷自拍另类12p | 国内黄色一级精品 | 国产成人午夜福在线观看 | 国产成人成人一区二区 | 91久久国产成人免费观看资源 | 在线观看国产亚洲 | 成人午夜性视频欧美成人 | 777444欧美影视| 无内丝袜透明在线播放 | 国产日韩欧美一区二区三区在线 | 99久久精品免费看国产高清 | 一本色道久久综合网 | 男人的天堂在线观看免费 | 厕拍精品 | 欧美高清一级毛片免费视 |