最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言#define定義宏的使用詳解

 更新時間:2022年10月28日 09:36:42   作者:小小涵兒  
#define?機(jī)制包括了一個規(guī)定,允許把參數(shù)替換到文本中,這種實現(xiàn)通常稱為宏(macro)或定義宏(define?macro)。本文就來和大家聊聊宏的使用,需要的可以參考一下

1.宏是什么

#define 機(jī)制包括了一個規(guī)定,允許把參數(shù)替換到文本中,這種實現(xiàn)通常稱為宏(macro)或定義宏(define macro)。

語法:

#define name( parament-list ) stuff

parament-list:是一個由逗號隔開的符號表。

2.宏的用法

#define SUM(x,y) ((x)+(y))
int main()
{
    int a = 10;
    int b = 20;
    int ret = SUM(a, b);
    printf("%d\n", ret);
    return 0;
}

簡要說明:宏已經(jīng)被替換

分位三個階段:預(yù)編譯、編譯、匯編

3. 宏的注意事項

定義什么替換什么

來看這一例:

#define NUM(x,y) x+y
int main()
{
    int a = 2;
    int b = 3;
    printf("%d\n", NUM(a, b) * NUM(a, b));
    //結(jié)果:11
    return 0;
}

原因:num(a,b)*num(a,b) = a + b * a + b=11

4. 宏和函數(shù)的區(qū)別

屬性#define定義宏函數(shù)
代碼長度如果多次調(diào)用,多次替換,如果是大長度宏其長度很長函數(shù)只實現(xiàn)一次可以多次使用,如果多次調(diào)用,長度只有一份
執(zhí)行速度更快函數(shù)調(diào)用和開辟都會有額外開銷
操作符優(yōu)先級必須每個參數(shù)加上括號,否則操作符優(yōu)先級可能會產(chǎn)生不可預(yù)料的后果函數(shù)參數(shù)只在函數(shù)調(diào)用的時候求值一次,它的結(jié)果值傳遞給函數(shù)。表達(dá)式的求值結(jié)果更容易預(yù)測
帶有副作用參數(shù)多次調(diào)用宏會有不可預(yù)料的后果函數(shù)參數(shù)只在傳參的時候求值一次,結(jié)果更容易控制,只需關(guān)注是傳值還是傳址
參數(shù)類型宏的參數(shù)和類型無關(guān),可以使用與任何參數(shù)類型函數(shù)參數(shù)與類型有關(guān),類型取決于使用目的,傳值,傳址,還是拿一個字節(jié)數(shù)據(jù)char*
調(diào)試不方便調(diào)試,編譯期間就已經(jīng)替換可調(diào)試
遞歸不可遞歸可遞歸

宏帶副作用參數(shù):

#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
int main()
{
    int x = 5;
    int y = 8;
    int z = MAX(x++, y++);
    printf("x=%d y=%d z=%d\n", x, y, z);//輸出的結(jié)果是什么
    return 0;
}
//( (x++) > (y++) ? (x++):(y++) )
//輸出結(jié)果:x=6,y=10,z=9

5.命名要求

宏名必須大寫

函數(shù)不要全部大寫

6. 條件編譯

常見條件編譯指令及應(yīng)用場景

1.單分支

編譯指令:

#if 常量表達(dá)式
? //…
#endif

應(yīng)用場景:

int main()
{
#if 4>2
    printf("hello world!\n");
#endif
    return 0;
}
//輸出hello world

2.多分支

編譯指令:

#if 常量表達(dá)式
? //…
#elif 常量表達(dá)式
? //…
#else
? //…
#endif

應(yīng)用場景:

int main()
{
#if 1>2
    printf("xixi\n");
#elif 4>3
    printf("haha\n");
#else 
    printf("heihei\n");
#endif
    return 0;
}
//輸出結(jié)果:haha

可不能和if else選擇語句混淆,多分支條件編譯從上往下走,如果有一個分支成立,后面分支就不再執(zhí)行;但是選擇語句是從上往下走,有一個分支成立,繼續(xù)查看后面分支是否成立

3.判斷是否被定義

編譯指令:

1. > #if defined(symbol) 或 #ifdef symbol

2. > #if !defined(symbol) 或 #ifndef symbol

應(yīng)用場景:

  ```c
  
  #define DEF    
  int main()
  {
  #if defined(DEF)
      printf("haha\n");
  #endif
  
  #ifdef MAX
      printf("heihei\n");
  #endif
      return 0;
  }
  //輸出結(jié)果:haha
  ```

4.嵌套指令

編譯指令

#if 常量表達(dá)式
#ifdef symbol
//操作
#endif
#elif 常量表達(dá)式
#ifdef symbol
//操作
#endif
#endif

條件編譯指令也支持嵌套,注意#endif結(jié)束本次嵌套

5.刪除宏定義

編譯指令:

#undef

應(yīng)用場景:

#define DEF
int main()
{
#undef DEF//刪除DEF宏定義了
#ifdef DEF
    printf("hehe\n");
#endif
    return 0;
} 

以上就是C語言#define定義宏的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言#define定義宏的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt如何實現(xiàn)輸入框@聯(lián)系人的@檢測的示例

    Qt如何實現(xiàn)輸入框@聯(lián)系人的@檢測的示例

    本文主要介紹了Qt如何實現(xiàn)輸入框@聯(lián)系人的@檢測的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++全密碼生成的實現(xiàn)代碼

    C++全密碼生成的實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++全密碼生成的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java?C++題解?leetcode第k個數(shù)實例

    Java?C++題解?leetcode第k個數(shù)實例

    這篇文章主要為大家介紹了Java?C++題解?leetcode第k個數(shù)實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于C語言實現(xiàn)的TCP服務(wù)器的流程分析

    基于C語言實現(xiàn)的TCP服務(wù)器的流程分析

    本文詳細(xì)介紹了如何使用C語言編寫一個簡單的TCP服務(wù)器,包括創(chuàng)建套接字、綁定IP和端口、監(jiān)聽連接請求、接受客戶端連接、數(shù)據(jù)接收與發(fā)送以及關(guān)閉套接字等步驟,最后通過一個簡單的示例展示了TCP服務(wù)器的基本實現(xiàn)過程
    2024-10-10
  • C++成員函數(shù)中const的使用詳解

    C++成員函數(shù)中const的使用詳解

    這篇文章主要為大家詳細(xì)介紹了C++成員函數(shù)中const的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言基于EasyX庫實現(xiàn)有顏色彈跳小球

    C語言基于EasyX庫實現(xiàn)有顏色彈跳小球

    這篇文章主要為大家詳細(xì)介紹了C語言基于EasyX庫實現(xiàn)有顏色彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言實現(xiàn)的猜拳游戲代碼分享

    C語言實現(xiàn)的猜拳游戲代碼分享

    本文給大家分享的是一個C語言實現(xiàn)的猜拳小游戲,由于本程序簡單易操作,交互性好,對用戶沒什么特別要求。這里推薦給大家
    2016-02-02
  • C++整數(shù)拼接技巧大揭秘

    C++整數(shù)拼接技巧大揭秘

    C++整數(shù)拼接技巧大揭秘,讓你的代碼更簡潔高效!你是否還在為如何優(yōu)雅地將整數(shù)拼接成字符串而煩惱?本指南將為你揭示C++中最實用、最酷炫的整數(shù)拼接技巧,助你提升編程技能,需要的朋友可以參考下
    2024-03-03
  • C語言自動生成enum值和名字映射代碼

    C語言自動生成enum值和名字映射代碼

    這篇文章主要介紹了C語言自動生成enum值和名字映射代碼的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 歸并排序的遞歸實現(xiàn)與非遞歸實現(xiàn)代碼

    歸并排序的遞歸實現(xiàn)與非遞歸實現(xiàn)代碼

    以下是對歸并排序的遞歸實現(xiàn)與非遞歸實現(xiàn)代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-08-08

最新評論

金坛市| 稷山县| 栾川县| 安岳县| 曲麻莱县| 赫章县| 丁青县| 灌云县| 澄江县| 汝州市| 柞水县| 万荣县| 洪雅县| 游戏| 日土县| 舒兰市| 响水县| 都匀市| 尼勒克县| 堆龙德庆县| 西充县| 舒城县| 修水县| 桦南县| 鄂尔多斯市| 龙川县| 永康市| 兴安盟| 麻栗坡县| 通榆县| 彩票| 肃北| 北辰区| 犍为县| 孝昌县| 斗六市| 鄂伦春自治旗| 中方县| 盱眙县| 化州市| 肥乡县|